資料庫 SQL 行轉列

2021-08-19 16:10:09 字數 1191 閱讀 6019

學校裡面記錄成績,每個人的選課不一樣,而且以後會新增課程,所以不需要把所有課程當作列。資料庫grade裡面資料如下圖,假定每個人姓名都不一樣,作為主鍵。本文以mysql為基礎,其他資料庫會有些許語法不同。

資料庫資料:

處理後效果:

方法一:

select distinct a.name, (select score from grade b where a.name=b.name and b.course='語文')as'語文',  

(select score from grade b where a.name=b.name and b.course='數學')as'數學',

(select score from grade b where a.name=b.name and b.course='英語')as'英語'

from grade a

方法二:

select name, sum(case course when '語文'then score end)as'語文',

sum(case course when '數學'then score end)as'數學',

sum(case course when '英語'then score end)as'英語'

from grade group by name

方法二還可以使用if語句。

如下所示:

select name,

sum(if (course = '語文' , score , null ) ) as '語文',

sum(if (course = '數學' , score , null ) ) as '數學',

sum(if (course = '英語' , score , null ) ) as '英語 '

from grade group by name

方法分析:

第一種方法使用了表連線。

第二種使用了分組,對每個分組分別處理。

資料庫行轉列

話不多說直接進入正題 資料接庫資料如下圖 要把資料變成行,一目了然的看到乙個學生的所有科目成績,sql如下 select name,max case subject when 語文 then score else 0 end as 語文 max case subject when 數學 then s...

資料庫行轉列的sql語句 zt

問題描述 假設有張學生成績表 cj 如下 name subject result 張三 語文 80 張三 數學 90 張三 物理 85 李四 語文 85 李四 數學 92 李四 物理 82 現在 想寫 sql 語句 查詢後結果 為 姓名 語文 數學 物理 張三 80 90 85 李四 85 92 8...

資料庫動態行轉列

1 棧stack.peek 表示的是取得棧頂元素值,但不將其彈出。2 sql語句 動態行轉列 string sql1 declare strsql varchar 8000 set strsql select stuname 姓名 string sql2 sql1 select strsql str...