sql行轉列問題

2021-10-03 11:49:25 字數 1540 閱讀 9445

mysql sql語句:行轉列問題

存在表score,記錄學生的考試成績,如下圖所示:

現要求以 學生姓名,語文,數學,英語 這種格式顯示學生成績,如下圖所示

具體步驟如下:

1、首先,使用case when函式輸出單個課程的成績

case

when course=

'語文'

then score end

as 語文

case

when course=

'數學'

then score end

as 數學

case

when course=

'英語'

then score end

as 英語

sql語句:

select name ,

case

when course=

'語文'

then score end

as 語文,

case

when course=

'數學'

then score end

as 數學,

case

when course=

'英語'

then score end

as 英語 from score;

2、使用group by 和sum,去掉null得出課程的成績

sql語句:

select name ,

sum(

case

when course=

'語文'

then score end

)as 語文,

sum(

case

when course=

'數學'

then score end

)as 數學,

sum(

case

when course=

'英語'

then score end

)as 英語

from score group

by name;

輸出結果如下圖所示

就得出行轉列的輸出結果了

總結:在具體的生活場景中,使用學生姓名,課程1,課程2,課程3……的表結構是不太合理的,比如選修課的表結構是不太合理的,比如選修課,不可能每個學生都選一樣的課程,這種結構會存在浪費儲存空間的情況,比較好的做法就是一行表示乙個學生的某個課程的成績,再使用行轉列方法輸出想要的成績結構。

sql 行轉列問題

題目 下表tproduct某產品在各城市各月銷量情況 city name month no 月 qut qty 臺 杭州 9 100 杭州 10 120 上海 9 130 上海 10 140 請寫sql實現 如下查詢 city 9月銷量 10月銷量 杭州 100 120 上海 130 140 答案一...

經典SQL問題 行轉列《轉》

20人收藏此文章,我要收藏 贊0 學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料庫grade裡面資料如下圖,假定每個人姓名都不一樣,作為主鍵。本文以mysql為基礎,其他資料庫會有些許語法不同。資料庫資料 處理後效果 下面介紹三種方法 方法一 1 2345...

SQL 行轉列總結

行轉列應該使用case 想要把某個行轉成列的列名 when 裡將各個列的值放進去 then 分組後某個值要進行彙總行 else 0 end 動態生成的話,將想要用的轉的,用selec查出來拼成以上格式就可以了 declare sql varchar 8000 如果大於8000只能用程式去拼乙個sql...