0

以下に、2 つのテーブルと結果テーブルを示します。

ここに画像の説明を入力

上記のように、この方法で結果テーブルを取得するにはどうすればよいですか?

4

3 に答える 3

6
select min(ID) as ID,
       Val,
       stuff((select ','+Cat
              from Table2 as T2
              where T1.Val = T2.Val
              for xml path(''), type).value('.', 'nvarchar(max)'), 1, 1, '') as Cat
from Table2 as T1
group by Val
order by ID

SQL フィドル

于 2012-06-20T19:31:05.723 に答える
0
DECLARE @Table1 TABLE
( 
 id INT
 ,Val VARCHAR(100)
)
DECLARE @Table2 TABLE
(
id INT
,Val VARCHAR(100)
,Cat VARCHAR(100)
)

INSERT INTO @Table1
VALUES(1,'XYZ')

INSERT INTO @Table1
VALUES(2,'abc')

INSERT INTO @Table2
VALUES(1,'XYZ','a')

INSERT INTO @Table2
VALUES(1,'abc','e')

INSERT INTO @Table2
VALUES(1,'XYZ','b')

INSERT INTO @Table2
VALUES(1,'XYZ','f')

INSERT INTO @Table2
VALUES(1,'abc','g')


SELECT t1.id,t1.Val ,( SELECT STUFF((SELECT ',' + cat  FROM @Table2 t2 WHERE  t2.Val =                   t1.val FOR XML PATH('')),1,1,''))
 FROM   @Table1 t1
于 2012-06-20T19:34:44.540 に答える
0

それを行うために、CLR ユーザー定義集計を定義できます。このようなソリューションの詳細な説明を別の質問への回答として投稿しました - TSQL Comma Separation。そこには、CLR 集計の開発中に発生する可能性のある問題について説明しているブログ投稿へのリンクもあります。

カスタム集計をサーバーにデプロイした後 (関数に名前を付けましたConcatが、関数の名前は異なる場合があります)、次のクエリで必要な結果を取得できます。

SELECT Val, dbo.Concat(Cat)
FROM Table2
GROUP BY Val
于 2012-06-20T19:38:51.423 に答える