は答えです。私のコメントで言及したように、これはあなたが作業しているディメンション内でのみ動作し、既知/修正されています。まず、サンプルデータ:
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
だから、私たちは長い間、我々は相互参照のすべて知っているように、このクエリを構築することができます識別子、例えばFoo
、Bar
、1
、2
、3
、4
、および5
。変換のこの種をやりたいと思っほとんどのケースでは、これらの値のすべてを知っていない、ので、SQLは、変換達成するための方法ではありません - 再フォーマットのこの種を達成するために、元の結果を消費しているものは何でもツールを使用します。
あなたは 'PIVOT'続く' UNPIVOT'を行うことができますが、いつものように、それだけで一定の大きさのために動作します。そして、いつものように、質問は尋ねる必要があります。なぜあなたはSQLでレポート書式設定を行っていますか?行と列はSQLでは*同じものではありません。 –
元のテーブルに2列しかない場合、ピボットを使用してこれを実行しました。しかし、3(またはそれ以上の列)については、私は答えを見つけることができないようです。 –
迅速な対応をありがとうございます。私はSQLでかなり新しいです...私はどこでフォーマットをしていますか? –