前言
工作中在處理數據數據時,我們常常會遇到需要把數據庫的數據進行行轉列的操作,以下,記錄兩種方式的行轉列。
實現方式
在這之前需要執行以下操作,插入測試數據,方便后續舉例子。
創建成績表
創建一張成績表,創建SQL
語句如下:
CREATE TABLE CJ
(
Id INT PRIMARY KEY IDENTITY(1,1), --主鍵
NZ VARCHAR(50), --姓名
KM VARCHAR(50), --科目
CJ INT, --成績
CJSJ DATETIME --時間
)
插入數據
添加測試數據,創建SQL
語句如下所示:
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('大明','語文',100,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('大明','數學',90,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('大明','英語',80,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('大明','生物',70,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('大明','物理',60,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('小明','語文',50,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('小明','數學',60,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('小明','英語',70,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('小明','生物',80,getdate())
insert into CJ (NZ,KM,CJ,CJSJ) VALUES ('小明','物理',60,getdate())
實現行轉列
實現行轉列有兩種方式,方式一,可通過CASE WHEN
實現;方式二:可通過PIVOT
實現;以下是分別使用這兩種方式實現的具體語法。
方式一:CASE WHEN
SQL
查詢語句如下所示:
SELECT NZ '姓名',
MAX(CASE KM WHEN '語文' then CJ ELSE 0 END) '語文',
MAX(CASE KM WHEN '數學' then CJ ELSE 0 END) '數學',
MAX(CASE KM WHEN '數學' then CJ ELSE 0 END) '數學',
MAX(CASE KM WHEN '生物' then CJ ELSE 0 END) '生物',
MAX(CASE KM WHEN '物理' then CJ ELSE 0 END) '物理'
FROM CJ
GROUP BY NZ
方式二:PIVOT
SQL
查詢語句如下所示:
SELECT * FROM
(
SELECT 姓名=NZ,科目=KM,成績=CJ
FROM CJ
) A
PIVOT
(
SUM(A.成績) FOR A.科目 IN (語文,數學,英語,生物,物理)
) P
最后,兩種方式的實現的效果如下: