具有相同名称值的SQL concat行

时间:2014-09-03 06:26:03

标签: sql

假设我有这样的表

Name | Stage | Date
-------------------
A    |  1st |  03092014    
A    |  2nd |  04092014    
A    |  3rd |  05092014    
B    |  1st |  06092014    
B    |  2nd |  08092014    
C    |  1st |  03092014

我想知道如何编写SQL代码,它会用相同的名称连接行,我会得到类似的东西

Name | Stage          | Date
----------------------+-----------------------------
A    | 1st , 2nd, 3rd |  03092014 04092014 05092014    
B    | 1st, 2nd       |  06092014 08092014    
C    | 1st            |  03092014

我是否需要在循环中运行表格,或者有更好的方法吗?

UPD: 我发现我需要在Excel中使用此查询

2 个答案:

答案 0 :(得分:3)

您可以使用GROUP_CONCAT

SELECT Name
     , GROUP_CONCAT(Stage) AS Stages
     , GROUP_CONCAT(Date) AS Dates
  FROM my_table
GROUP BY Name;

答案 1 :(得分:1)

关于您的问题 - 我假设您正在使用MS SQL Server 2008或更高版本来获得所需的输出

我建议在这里使用CROSS APPLY来连接数据 -

假设您的表名 - temptable

SELECT distinct tblMain.Name, substring(stages, 1, len(stages)-1) as [Stage],substring(dates, 1, len(dates)-1) as [Date]  
FROM temptable tblMain
CROSS APPLY (
    SELECT LTRIM(RTRIM(Stage)) + ',' 
    FROM temptable tblDup1 WITH(NOLOCK)
    WHERE tblDup1.Name= tblMain.Name

     FOR XML PATH('')
) t1 (stages)
CROSS APPLY (
    SELECT LTRIM(RTRIM(Date)) + ' ' 
    FROM temptable tblDup2 WITH(NOLOCK)
    WHERE tblDup2.Name= tblMain.Name

     FOR XML PATH('')
) t2 (dates)

工作FIDDLE OUTPUT