SQL查询仅在两列中获取结果集

时间:2013-03-12 10:48:09

标签: sql sql-server-2008 unpivot

我有这张桌子:

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   

等等。

有关如何执行此操作的任何建议。

2 个答案:

答案 0 :(得分:3)

您可以使用UNPIVOT功能将列转换为行:

select id, value
from yourtable
unpivot
(
  value
  for col in ([fName], [lName], [Address], [PostCode], [ContactNumber])
) unpiv

请参阅SQL Fiddle with Demo

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 Fiddle with Demo

从SQL Server 2008开始,也可以使用带有CROSS APPLY的{​​{1}}来编写:

VALUES

请参阅SQL Fiddle with Demo

答案 1 :(得分:0)

这样的事情怎么样:

SELECT
 id, fName as label
FROM
 table

UNION ALL

SELECT
 id, lName
FROM
 table

UNION ALL

SELECT
 id, Address
FROM
 table

...etc