SQL查询案例:列行转换[列转行, 使用 UNION ALL 处理]
在行列转换的处理之后, 有时候会遇到,要列行装换的
CREATE TABLE TestColRow (
name VARCHAR(10),
东 INT,
南 INT,
西 INT,
北 INT
);
INSERT INTO TestColRow
VALUES ('张三', 1, 2, 3, 4);
INSERT INTO TestColRow
VALUES ('李四', 5, 6, 7, 8);
使用 UNION ALL 的方式处理
SELECT
name, '东' AS Place, 东 AS Value
FROM
TestColRow
UNION ALL
SELECT
name, '南' AS Place, 南 AS Value
FROM
TestColRow
UNION ALL
SELECT
name, '西' AS Place, 西 AS Value
FROM
TestColRow
UNION ALL
SELECT
name, '北' AS Place, 北 AS Value
FROM
TestColRow
name Place Value
---------- ----- -----------
张三 东 1
李四 东 5
张三 南 2
李四 南 6
张三 西 3
李四 西 7
张三 北 4
李四 北 8
使用 UNPIVOT 的处理方式
SELECT
ROW_NUMBER() OVER (ORDER BY (SELECT 0)) AS id,
*
FROM
TestColRow
UNPIVOT( Value FOR Place IN ([东],[南],[西],[北]) )
AS a
结果:
id name Value Place
---- ----- ------ ------
1 张三 1 东
2 张三 2 南
3 张三 3 西
4 张三 4 北
5 李四 5 东
6 李四 6 南
7 李四 7 西
8 李四 8 北