mysql行轉列的例項

2021-06-18 13:14:53 字數 2360 閱讀 8551

準備表和資料:

case when 實現行轉列

儲存過程實現行轉列

create  procedure line_to_col()

begin

declare i int;

declare _chinese int;

declare _math int;

declare _english int;

declare _name varchar(10);

declare test_cursor cursor for select name from user;

select count(*) into i from user;

create temporary table tmp_tab(

name varchar(10),

chinese_score int,

math_socre int,

english_score int);

if i> 0 then

open test_cursor;

repeat fetch test_cursor into _name;

select score into _chinese from user where subject = 'chinese' and name =_name;

select score into _math from user where subject = 'math' and name =_name;

select score into _english from user where subject = 'english' and name =_name;

insert into tmp_tab values(_name,_chinese,_math,_english);

set i=i-1;

until i=0 end repeat;

close test_cursor;

end if;

select distinct * from tmp_tab;

drop table tmp_tab;

end

在寫儲存過程的時候遇到了兩個問題,分別是關於游標和臨時表。

因為user表中有重複的name,在設定游標時,我想直接過濾掉重複的使用者,所以將游標設定成

declare test_cursor cursor for select

distinct

name from user;這樣設定游標之後,執行儲存過程,報錯提示沒有獲取任何資料。小小同志跟我解釋說,

游標是遍歷用的,怎麼能distinct呢 ,只能對取數做distinct。

mysql 動態行轉列 MySQL行轉列

比如乙個單子,多個收據單用逗號隔開,怎麼把這乙個單子所有收據單獨展示出來,行轉成列呢?方法一 這裡需要用到迴圈,首先建立乙個1 10的序列 select rownum rownum 1 as seq from select rownum 0 r,bills limit 0,10 其次依次運用 sub...

mysql行轉列 subs mysql 行轉列

存在表score,記錄學生的考試成績,如下圖所示 現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示 具體步驟如下 1 首先,使用case when函式輸出單個課程的成績 case when course 語文 then score end as 語文 case when cou...

SQL行轉列例項

sql行轉列是比較經典的問題 比如有如下資料表,有如下某一款號 表1 顏色 尺碼 庫存 紅色 s 10 紅色 m 80 白色 l 50 白色 s 60 要將上面的表轉化為如下格式 表2 顏色 s m l 紅色 10 80 0 白色 60 0 50 動態sql create table tbl 0 c...