2016-08-09 10 views
0

私はEmployeesというテーブルにデータをコンパイルしました。テーブル定義は縦の横の列が必要です

Name   Age 
Sam   25 
Mike   28 

であるそれは私がこのクエリを記述することができませんフォーマット

SAM 
25 
MIKE 
28 

で出力を与えることができますクエリを記述することが可能です。それは可能ですか? そうでなければ、どうすればそれを達成できますか? 私はそれをカーソルを使って行うことができますが、それは私のprocのパフォーマンスを大きく低下させます。

答えて

1

が簡単に要求されたよう

Declare @User table (id int,First_Name varchar(50),Last_Name varchar(50),EMail varchar(50)) 
Insert into @User values 
(1,'John','Smith','[email protected]'), 
(2,'Jane','Doe' ,'[email protected]') 

Declare @XML xml 
Set @XML = (Select * from @User for XML RAW) 

Select ID = r.value('@id','int') 
     ,Item = Attr.value('local-name(.)','varchar(100)') 
     ,Value = Attr.value('.','varchar(max)') 
From @XML.nodes('/row') as A(r) 
Cross Apply A.r.nodes('./@*[local-name(.)!="id"]') as B(Attr) 

戻り

ID Item  Value 
1 First_Name John 
1 Last_Name Smith 
1 EMail  [email protected] 
2 First_Name Jane 
2 Last_Name Doe 
2 EMail  [email protected] 
+0

XMLを使用せずに行うことはできますか?答えをありがとう.. !! –

+0

@NimbleFungus確かに、しかし、あなたは動的SQLに行く必要があります –

+0

確かに。それは問題ではありません..親切に私を助けてください。 –

1

をあなたのニーズに合った変更が、私は

Declare @Table varchar(150) = 'YourTableName' 

Declare @SQL varchar(max) = '>>>' 
Select @SQL = Replace(@SQL + SQL ,'>>>Union All ','') 
From (Select Seq=ORDINAL_POSITION,SQL='Union All Select Value=cast(['+Column_Name+'] as varchar(500)) From ['+Table_Schema+'].['+Table_Name+']' From INFORMATION_SCHEMA.COLUMNS where [email protected]) A 
Order By Seq 

--Print @SQL 
Exec(@SQL) 

サンプルリターン

Value 
22 Star Ave, Riverside, RI 02915 
22 Planet Ave, Riverside, RI 02915 
100 Peck Ave, Riverside, RI 02915 
1086 Willett Ave, Riverside, RI 02915 
4 
5 
6 
0123それにほとんど価値を参照してください
+0

ありがとうございます。あなたは正しいです。下のものは魅力的に働いています。 –

+0

@NimbleFungusハッピーなことを知っています。歓声 –

+0

乾杯..ありがとう。 –

関連する問題