SQLserver 如何優雅的行轉列


前言


工作中在處理數據數據時,我們常常會遇到需要把數據庫的數據進行行轉列的操作,以下,記錄兩種方式的行轉列。

實現方式

在這之前需要執行以下操作,插入測試數據,方便后續舉例子。

創建成績表

創建一張成績表,創建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

最后,兩種方式的實現的效果如下:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM