2012-02-10 2 views
0

ここでは、多くの行から列へのスレッドを見たことがありますが、私が探しているものを正確に見つけることができません。この中に、SQL Server 2005の行と列をどのように切り替えるのですか?

ID Foo Bar 
1  A  F 
2  B  G 
3  C  H 
4  D  I 
5  E  J 

はどのようにして、次の表を変換します

ID 1 2 3 4 5 
Foo A B C D E 
Bar F G H I J 

感謝を!私はSQL Server 2005を使用しています。ここで

+0

あなたは 'PIVOT'続く' UNPIVOT'を行うことができますが、いつものように、それだけで一定の大きさのために動作します。そして、いつものように、質問は尋ねる必要があります。なぜあなたはSQLでレポート書式設定を行っていますか?行と列はSQLでは*同じものではありません。 –

+0

元のテーブルに2列しかない場合、ピボットを使用してこれを実行しました。しかし、3(またはそれ以上の列)については、私は答えを見つけることができないようです。 –

+0

迅速な対応をありがとうございます。私はSQLでかなり新しいです...私はどこでフォーマットをしていますか? –

答えて

0

答えです。私のコメントで言及したように、これはあなたが作業しているディメンション内でのみ動作し、既知/修正されています。まず、サンプルデータ:

declare @Table table (ID int not null,Foo char(1) not null,Bar char(1) not null) 
insert into @Table (ID,Foo,Bar) 
select 1,'A','F' union all 
select 2,'B','G' union all 
select 3,'C','H' union all 
select 4,'D','I' union all 
select 5,'E','J' 

select * from @Table --As per your original data table 

;with Rot1 as (
    select 
     * 
    from 
     @Table unpivot (Value for Col in (Foo,Bar)) t 
) 
select * from Rot1 -- See below 

;with Rot1 as (
    select 
     * 
    from 
     @Table unpivot (Value for Col in (Foo,Bar)) t 
), Rot2 as (
    select 
     * 
    from Rot1 pivot (MAX(Value) for ID in ([1],[2],[3],[4],[5])) t 
) 
select * from Rot2 -- As per your required result 

出力単なるRot1からの選択である:

ID Value Col 
1 A Foo 
1 F Bar 
2 B Foo 
2 G Bar 
3 C Foo 
3 H Bar 
4 D Foo 
4 I Bar 
5 E Foo 
5 J Bar 

だから、私たちは長い間、我々は相互参照のすべて知っているように、このクエリを構築することができます識別子、例えばFooBar1234、および5。変換のこの種をやりたいと思っほとんどのケースでは、これらの値のすべてを知っていない、ので、SQLは、変換達成するための方法ではありません - 再フォーマットのこの種を達成するために、元の結果を消費しているものは何でもツールを使用します。

関連する問題