1行のデータを1列(複数行)として表示する方法を探しています。例えば、
FieldA FieldB ------- --------- 1テキスト[行] ヘッダー値[col] ------ ------ FieldA 1 [row1] FieldB SomeText [row2]
SQL Server 2005でこれを行う方法はありますか?
1行のデータを1列(複数行)として表示する方法を探しています。例えば、
FieldA FieldB ------- --------- 1テキスト[行] ヘッダー値[col] ------ ------ FieldA 1 [row1] FieldB SomeText [row2]
SQL Server 2005でこれを行う方法はありますか?
ここで説明されているunpivotを使用できます
Declare @tbl Table
(
c1 int,
c2 int,
c3 int
)
Insert into @tbl Values(1,2,3)
Select
cname,
cval
From
(
Select C1,C2,C3 From @tbl
) t
UNPIVOT
(Cval For Cname In
(C1,C2,C3)
)As U
しかし、それは通常柔軟性がなく、遅いです。ユニオンを使用できますが、通常はメンテナンスの点で劣りますが、高速である(チェックする必要がある)か、動的クエリとユニオンを使用する可能性があります
はい、TSQLコマンドPIVOTがあります。そして、このトピックにはいくつかの既存のスレッドがあります。しかし、私は手に負えないものを見つけることができません。
私の通常の答え(おそらくこれらのスレッドの5つまたは6つ)は、必要に応じてExcelまたはAccessの使用を検討することです。これは、エンドユーザーに価値を提供するための非常に簡単な方法です。しかし、YMMV。
別の簡単な方法:
テーブル
ユニオンからの値として「FieldA」、FieldAを
選択します。テーブルからの値として「FieldB」、FieldBを選択します。
しかし、ピボットは本当にあなたが試したいものです。
他のいくつかの回答が示唆しているように、T-SQL PIVOT コマンドを使用してください。
SQL Server Reporting Services にアクセスできる場合は、単純なクエリに基づいてレポートを作成し、マトリックス レポート コントロールを使用することもできます。フィールドをコントロールにドラッグ アンド ドロップするだけで完了です。
特定の何か、つまり一般的な解決策ではなく、特定の DB に合わせたものを探している場合は、次のようにすることができます。
select Field1+';'+convert(nvarchar(255), Field2 )+';'+convert(nvarchar(255),Field3 ) from Table
nvarchar(255) への変換を使用して、どのような文字が含まれていても問題が発生しないようにします。select を実行する前に照合を修正することを忘れないでください (それ以外の場合は、orderby と groupby で何が起こるかわかりません)。