我有一张像
这样的表格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中是否有任何函数或解决方案可以执行此操作?
答案 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
表现最佳。