GroupBy输出的T-SQL串联

时间:2019-01-15 16:47:46

标签: sql-server tsql

对于根据“实际表”中提供的GroupBy输出获得第二(所需)表的任何建议,我将不胜感激。

enter image description here

猜测光标可能会起作用,但是正在寻找更简单的解决方案。

2 个答案:

答案 0 :(得分:1)

如果您使用的是SQL 2017或SQL Azure,则可以将STRING_AGG聚合函数与GROUP BY一起使用

SELECT Ticket, STRING_AGG  (PartNumber)
FROM myTable
GROUP BY Ticket

答案 1 :(得分:1)

您可以使用以下查询

Create Table SepvalueTable (Ticket Int, PartNumber char(1))
Insert into SepvalueTable Values (1, 'A'), (1, 'B'),(2, 'C'),(3, 'A'),(3, 'B'),(3, 'C')

SELECT Ticket,
      PartNumber = 
              STUFF ( ( SELECT ' '+InrTab.PartNumber
                  FROM SepvalueTable InrTab
                  WHERE InrTab.Ticket = OutTab.Ticket
                  ORDER BY InrTab.Ticket
                  FOR XML PATH(''),TYPE 
                  ).value('.','VARCHAR(MAX)') 
                 , 1,1,SPACE(0))
FROM SepvalueTable OutTab
GROUP BY OutTab.Ticket;

输出如下所示

Ticket  PartNumber
------------------
1       A B
2       C
3       A B C

您可以找到完整的数据实时演示Live Demo Here