0

一連のテーブルを結合し、そのデータをテーブル変数に挿入しています。次に、テーブルからそれらのレコードを選択します。データは次のようになります。

サンプルセレクト

例からわかるように、一意のデータは列 7 と 8 にのみあります。この例では、2 つの行しかありません。しかし、それは無限の数になる可能性があります。したがって、一連の行をクライアントに送信してからデータを並べ替える代わりに、SQL でそれを行い、 1行だけを送り返したいと考えています。

2 つの列を除いてすべてのデータが同じであるため、データを連結してコンマで区切りたいと考えました。これにより、クライアント側の操作がはるかに簡単になります。

最終的に、1 つの行があり、Col7 と Col8 は次のようになります。

サンプルデータ

このタスクを達成する方法についてのアイデアはありますか?

4

2 に答える 2

1

テーブル全体を単一の行に折りたたみ、次のような列のデータを破棄するとしますID

DECLARE @x TABLE(Col7 varchar(255), Col8 varchar(255));

INSERT @x SELECT 'foo','bar'
UNION ALL SELECT 'blat','splunge';

SELECT Col7 = STUFF((SELECT ',' + Col7 FROM @x FOR XML PATH(''),
              TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 1, ''),
       Col8 = STUFF((SELECT ',' + Col8 FROM @x FOR XML PATH(''),
              TYPE).value(N'./text()[1]', N'varchar(max)'), 1, 1, '');
     

結果:

Col7       Col8
--------   -----------
foo,blat   bar,splunge

SQL Server 2017 以降では、はるかに簡単です。

SELECT Col7 = STRING_AGG(Col7, ','),
       Col8 = STRING_AGG(Col8, ',')
FROM @x;
于 2013-07-22T14:05:24.143 に答える