1

对 SQL 来说相当新,我已经查看了几个我认为与我目前正在努力解决的问题相同的问题的答案。他们中的大多数都引用了 Pivot 功能,但我不知道这是否是我需要的,甚至不知道如何使它工作。(我正在使用 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 回答