SQL Transpose / Pivot / Unpivot

时间:2016-01-27 23:30:37

标签: sql sql-server sql-server-2008

我有一张像

这样的表格
key | tag1 | tag2 | tag3 | tag4
A      1      4      8      9
B      3      7      9      4
C      7      3      2      6

我想查询表并获得看起来像

的结果
key  | tag
A       1
A       4
A       8
A       9
B       3
B       7
B       9
B       4
C       7
C       3
C       2
C       6

SQL中是否有任何函数或解决方案可以执行此操作?

2 个答案:

答案 0 :(得分:1)

这是一个简单的UNPIVOT

SELECT [key], [tag]
FROM tblName
UNPIVOT ([tag] FOR [vals] IN ([tag1], [tag2], [tag3], [tag4])) A

答案 1 :(得分:1)

以下是另外两种方法来取消你的桌子:

使用CROSS APPLY

SELECT
    t.key, x.tag
FROM tbl t
CROSS APPLY(VALUES
    (tag1), (tag2), (tag3), (tag4)
) x(tag)

使用UNION ALL

SELECT key, tag1 FROM tbl UNION ALL
SELECT key, tag2 FROM tbl UNION ALL
SELECT key, tag3 FROM tbl UNION ALL
SELECT key, tag4 FROM tbl

Dwain Camp撰写了一篇文章,显示CROSS APPLY表现最佳。