SQL查询案例:行列转换[行转列, 使用 CASE WHEN 处理]
行列裝換--使用CASE WHEN
測試表與測試數據
CREATE TABLE TestRowCol (
name?? VARCHAR(10),
place VARCHAR(10),
valuw INT
);
?
?
INSERT INTO TestRowCol VALUES ('張三', '東', 1);
INSERT INTO TestRowCol VALUES ('張三', '南', 2);
INSERT INTO TestRowCol VALUES ('張三', '西', 3);
INSERT INTO TestRowCol VALUES ('張三', '北', 4);
INSERT INTO TestRowCol VALUES ('李四', '東', 5);
INSERT INTO TestRowCol VALUES ('李四', '南', 6);
INSERT INTO TestRowCol VALUES ('李四', '西', 7);
INSERT INTO TestRowCol VALUES ('李四', '北', 8);
?
要求
將標題為
name?????? place????? valuw
---------- ---------- -----------
?
修改為
?
Name ??東??南??西??北
?
?
思路
CASE WHEN + GROUP BY處理
?
實現
?
SELECT
name,
SUM(CASE WHEN place = '東' THEN valuw ELSE '0' END) AS 東,
SUM(CASE WHEN place = '南' THEN valuw ELSE '0' END) AS 南,
SUM(CASE WHEN place = '西' THEN valuw ELSE '0' END) AS 西,
SUM(CASE WHEN place = '北' THEN valuw ELSE '0' END) AS 北
FROM
TestRowCol
GROUP BY
name
?
執行結果
name?????? 東??????????南??????????西??????????北
---------- ----------- ----------- ----------- -----------
李四?????????????????? 5?????????? 6?????????? 7?????????? 8
張三?????????????????? 1?????????? 2?????????? 3?????????? 4
?
?
?
?
行列裝換--使用PIVOT? (SQL Server 2005 及以上版本可用)
測試表與測試數據
同行列裝換--使用CASE WHEN
實現
SELECT
name,
tmp.[東] 東,
tmp.[南] 南,
tmp.[西] 西,
tmp.[北] 北
FROM
TestRowCol
PIVOT(
SUM(valuw)
FOR place IN ([東], [南], [西], [北] )
) tmp
ORDER BY
name
總結
以上是生活随笔為你收集整理的SQL查询案例:行列转换[行转列, 使用 CASE WHEN 处理]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos网络安装
- 下一篇: 浏览器根据什么来判定脚本失控?