2016-04-06 22 views
0

私は数百列の幅のテーブルを持っています。クエリ内の各単一の列を一覧表示することなく列タイトルを含む単一の連結文字列に各行を変換する方法はありますか?私はクエリでいくつかのことをやったことがありますが、それはそれぞれの列に対してやりがいがあり、エラーが起こりやすいようです。ここでは列毎のアプローチで行われ、私は必要な形式で連結3つの列を示す簡単なスニペットは、次のとおりです。列名を含む連結文字列に変換する

SELECT 
Concat( 
    IIf(Id IS NULL, Null, Concat('Id: ' , [Id] , '\n')) , 
    IIf(StandardClientId IS NULL, Null, 
    Concat('StandardClientId: ' , [StandardClientId] , '\n')) , 
    IIf(ClientName IS NULL, Null, 
    Concat('ClientName: ' , [ClientName] , '\n')) 
) AS ReportLine 
FROM dbo.DataDecoded; 

私は、Microsoft SQL Serverの2014標準を使用しています。これを行う最も簡単な方法は、あなたのためにあなたの文の迷惑な部分を書き込み、クエリを記述することである

おかげ

+2

これは、プレゼンテーション層ではるかに簡単に達成できます。この情報を表示するためにあなたは何を使用していますか? –

+0

あなたはおそらく、動的SQLを使って、または 'INFORMATION_SCHEMA.COLUMNS'をクエリすることでクエリを構築することができますが、アプリケーションでこのフォーマットを行うのはなぜですか?私はあなたが達成しようとしていることを理解していません。テーブルをUNPIVOTしようとしているようです。 –

+0

私はこれを使用して、選択した行ごとにレポートを出力します。各行はオカレンスレポートを表し、各列はレポート内のフィールドを表します。特定のレポートを理解しようとする人は、このように配置されている必要があります。 – rsjaffe

答えて

1

SELECT ORDINAL_POSITION, 
    COLUMN_NAME, 
    CONCAT('IIF(',COLUMN_NAME,' IS NULL, NULL, CONCAT(''', COLUMN_NAME, ''', '': '',', QUOTENAME(COLUMN_NAME), ', ''\n'')), ') 
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'dbo' 
    AND TABLE_NAME = 'DataDecoded' 
ORDER BY ORDINAL_POSITION; 

あなたはさらに一歩それを取ると、全体のことを行うことができますsprocのダイナミックですが、それは時間の無駄かもしれません。

+0

は、ここにあなたが構築することができるかもしれない単純なものだ INFORMATION_SCHEMA.COLUMNS FROM WHERE TABLE_NAME = '住所' AND TABLE_SCHEMA =' 人 XMLパスの( '') –

関連する問題