我有这张桌子:
id fName lName Address PostCode ContactNumber
-----------------------------------------------------
1 Tom Daley London EC1 4EQ 075825485665
2 Jessica Ennis Sheffield SF2 3ER 075668956665
3 Joe Bloggs Glasgow G3 2AZ 075659565666
我想要一个查询给我这样的结果:
id | label
1 | Tom
1 | Daley
1 | London
1 | EC1 4EQ
1 | 075825485665
2 | Jessica
2 | Ennis
2 | Sheffied
等等。
有关如何执行此操作的任何建议。
答案 0 :(得分:3)
您可以使用UNPIVOT
功能将列转换为行:
select id, value
from yourtable
unpivot
(
value
for col in ([fName], [lName], [Address], [PostCode], [ContactNumber])
) unpiv
unpivot 将要求所有列上的数据类型相同。因此,您可能必须对具有与此类似的不同数据类型的任何列执行cast
/ convert
:
select id, value
from
(
select id, [fName], [lName], [Address], [PostCode],
cast([ContactNumber] as varchar(15)) [ContactNumber]
from yourtable
) src
unpivot
(
value
for col in ([fName], [lName], [Address], [PostCode], [ContactNumber])
) unpiv;
从SQL Server 2008开始,也可以使用带有CROSS APPLY
的{{1}}来编写:
VALUES
答案 1 :(得分:0)
这样的事情怎么样:
SELECT
id, fName as label
FROM
table
UNION ALL
SELECT
id, lName
FROM
table
UNION ALL
SELECT
id, Address
FROM
table
...etc