準備表和資料:
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...