1

私はこのテーブルを持っています:

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   

などなど。

これを行う方法についての提案をお願いします。

4

2 に答える 2

3

関数を使用してUNPIVOT、列を行に変換できます。

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

SQL Fiddle with Demoを参照してください。

アンピボットでは、すべての列のデータ型が同じである必要があります。したがって、次のような異なるデータ型の列に対して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ますVALUES

select t.id,
  c.value
from yourtable t
cross apply
(
  values(fName), 
    (lName), 
    (Address), 
    (PostCode), 
    (cast(ContactNumber as varchar(15)))
) c (value)

デモで SQL Fiddle を参照してください

于 2013-03-12T10:53:06.470 に答える
0

このようなものはどうですか:

SELECT
 id, fName as label
FROM
 table

UNION ALL

SELECT
 id, lName
FROM
 table

UNION ALL

SELECT
 id, Address
FROM
 table

...etc
于 2013-03-12T10:50:21.700 に答える