在日常的SQL Server數據查詢時經常會遇到需要將數據列轉換成行的操作,現將自己學習的列轉行SQL語句舉例如下:
--首先查詢語句
SELCT * FROM YXBAK..TBYJKSTEMP

--列轉行的兩種方法
--列轉行第一種方法,使用CASE ... WHEN ... THEN ... ELSE ... END
SELECT 開單科室,
SUM(CASE 執行科室 WHEN '檢驗科' THEN 數量 ELSE 0 END) AS '檢驗科',
SUM(CASE 執行科室 WHEN '超聲科' THEN 數量 ELSE 0 END) AS '超聲科',
SUM(CASE 執行科室 WHEN '放射科' THEN 數量 ELSE 0 END) AS '放射科',
SUM(CASE 執行科室 WHEN 'CT室' THEN 數量 ELSE 0 END) AS 'CT室',
SUM(CASE 執行科室 WHEN 'MRI室' THEN 數量 ELSE 0 END) AS 'MRI室',
SUM(CASE 執行科室 WHEN '內鏡診療中心' THEN 數量 ELSE 0 END) AS '內鏡診療中心',
SUM(CASE 執行科室 WHEN '病理科' THEN 數量 ELSE 0 END) AS '病理科',
SUM(CASE 執行科室 WHEN '心肺功能科' THEN 數量 ELSE 0 END) AS '心肺功能科',
SUM(CASE 執行科室 WHEN '神經電生理檢查室' THEN 數量 ELSE 0 END) AS '神經電生理檢查室',
SUM(CASE 執行科室 WHEN '健康管理中心超聲科' THEN 數量 ELSE 0 END) AS '健康管理中心超聲科',
SUM(CASE 執行科室 WHEN '健康管理中心影像科' THEN 數量 ELSE 0 END) AS '健康管理中心影像科'
FROM YXBAK..TBYJKSTEMP GROUP BY 開單科室 ORDER BY 開單科室

--列轉行第二種方法使用pivot
--pivot透視
select * from
(select 開單科室,執行科室,數量 from YXBAK..TBYJKSTEMP) as a
pivot (sum(數量)
for 執行科室
IN ([檢驗科],[超聲科],[放射科],[CT室],[MRI室],[內鏡診療中心],[病理科],[心肺功能科],[神經電生理檢查室],[健康管理中心超聲科],[健康管理中心影像科]
)) as b ORDER BY 開單科室 asc

