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...