1

SQL にはかなり慣れていないので、現在苦労しているのと同じ問題だと思うことに対するいくつかの回答を見てきました。それらのほとんどはピボット機能を参照していますが、それが必要かどうか、またはそれを機能させる方法さえわかりません。(MS SQL Server Management Studio 2005 を使用しています)

基本的に、キーといくつかのプラントを含むテーブルがあり、出力は次のようになります。

Key  |  Plant
-------------
12   |  123
12   |  456
12   |  789
13   |  456
13   |  789
14   |  123
14   |  456
14   |  789
14   |  012
14   |  345
15   |  123
15   |  456

出力に次のようなデータを表示しようとしています:

Key  |  Plant
-------------------------------
12   |  123, 456, 789
13   |  456, 789
14   |  123, 456, 789, 012, 345
15   |  123, 456

植物の数は大きく異なりますが、キーに接続された植物の文字列として植物の列に植物を表示したいと思います。

4

2 に答える 2

2

PIVOTこれには関数は必要ありません。ピボットは、植物の行を個別の列に変換します。

必要な結果を得るには、次を使用できますFOR XML PATH

select distinct t1.[key],
  STUFF((SELECT distinct ', ' + t2.plant
         from yourtable t2
         where t1.[key] = t2.[key]
            FOR XML PATH(''), TYPE
            ).value('.', 'NVARCHAR(MAX)') 
        ,1,2,'') plant
from yourtable t1;

デモで SQL Fiddle を参照してください

于 2013-03-14T13:07:35.467 に答える
0

これを試して:

SELECT
   t1.[Key],
   STUFF(
            (SELECT ', ' + t2.Plant
            FROM yourtable t2
            WHERE t1.[Key] = t2.[Key]
            FOR XML PATH( '' )),
         1, 2, '' )
FROM yourtable t1
GROUP BY [Key]
于 2013-03-14T13:08:13.333 に答える