0
description_id       description
--------------      -------------
1                   Ampicillin Oral
1                   Ofloxacin Oral
1                   Sulfamoxole+Trimethoprim Oral
2                   Letrozole Oral
2                   Flunarizine Oral

table1のdescription_idとtable2のdescription。

結果は次のようになります

description_id       description
--------------       -----------
1                    Ampicillin Oral,Ofloxacin Oral, Sulfamoxole+Trimethoprim Oral
2                    Letrozole Oral, Flunarizine Oral
4

2 に答える 2

2

table2列もありdescription_id、それがdbo.table1の主キーであると想定しています。

SELECT description_id, STUFF((SELECT N',' + description
  FROM dbo.table2 WHERE description_id = t1.description_id
  FOR XML PATH(''), TYPE(N'./text()[1]', N'nvarchar(max)'), 1, 1, N'')
FROM dbo.table1 AS t1;

SQL Server 2017以降では、これはかなり整理されています。

SELECT t1.description_id, STRING_AGG(t2.description, N',')
  FROM dbo.table1 AS t1
  INNER JOIN dbo.table2 AS t2
  ON t1.description_id = t2.description_id
  GROUP BY t1.description_id;
于 2012-06-13T13:08:06.237 に答える
1

あなたが探しているのは、説明文字列を連結できる集計関数だと思います。

ただし、SQL Serverには数値を集計するための関数(SUMやAVERAGEなど)が組み込まれていますが、集計文字列連結関数は組み込まれていません。

これにより、2つの主なオプションが残ります。

  1. クライアントで連結を実行します。
  2. XML PATH、再帰CTEなどの回避策を使用するか、組み込みの共通言語ランタイムパッケージを使用します。

オプション2については、これを回避する方法に関するいくつかの記事があります。たとえば、行値の連結に関するこの記事です。そして確かに-私はアーロン・ベルトランの答えが入ってくるのを見たばかりです。それはあなたの状況でそれを行う方法を正確に示しています:)

于 2012-06-13T13:13:58.100 に答える