21

テーブルに sql クエリを記述して、結果にグループごとの列と、コンマ区切りで集計された列が含まれるようにする必要があります。

私のテーブルは以下の形式になります

   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |   a    |
   |_________|________|
   |    1    |   b    |
   |_________|________|
   |    2    |   c    |
   |_________|________|

期待される結果は以下の形式である必要があります

   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |  a,b   |
   |_________|________|
   |    2    |   c    |
   |_________|________|
4

2 に答える 2

26

FOR XML PATHコンストラクトを使用したい:

select 
    ID, 
    stuff((select ', ' + Value 
           from YourTable t2 where t1.ID = t2.ID 
           for xml path('')),
          1,2,'') [Values]
from YourTable t1
group by ID

機能は、先頭のSTUFFを取り除くことです', '

ここで別の例を見ることもできます:

于 2011-06-14T18:43:36.947 に答える
0

バランスの取れたビューのために、CTEでこれを行うこともできますが、クロス適用方法ほど良くはないと思います. ひづめのこれをコーディングしたので、うまくいかない場合は申し訳ありません。

WITH CommaDelimitedCTE (RowNumber,ID,[Value],[Values]) AS
(
  SELECT 1,MT.ID , MIN(MT.Value), CAST(MIN(MT.Value) AS VARCHAR(8000)) 
  FROM  MyTable MT
  GROUP BY MT.ID

  UNION ALL

  SELECT CT.RowNumber + 1, MT.ID, MT.Value, CT.[Values] + ', ' + MT.Value
  FROM  MyTable MT
  INNER JOIN CommaDelimitedCTE CT ON CT.ID = MT.ID
  WHERE MT.[Value] > CT.[Value]
)

Select CommaDelimitedCTE.* from CommaDelimitedCTE 
    INNER JOIN (SELECT MT.ID,MAX(RowNumber) as MaxRowNumber from CommaDelimitedCTE GROUP BY MT.ID) Q on Q.MT.ID = CommaDelimitedCTE.MT.ID
    AND Q.MaxRowNumber = CommaDelimitedCTE.RowNumber
于 2011-06-14T14:49:40.350 に答える