首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >用于在SQL Server中使用逗号分隔符和group by列获取聚合结果的SQL查询

用于在SQL Server中使用逗号分隔符和group by列获取聚合结果的SQL查询
EN

Stack Overflow用户
提问于 2011-06-14 22:15:49
回答 1查看 7.4K关注 0票数 20

我需要在表上编写一个sql查询,以便结果包含group by列和带有逗号分隔符的聚合列。

我的表格将采用以下格式

代码语言:javascript
复制
   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |   a    |
   |_________|________|
   |    1    |   b    |
   |_________|________|
   |    2    |   c    |
   |_________|________|

预期结果应采用以下格式

代码语言:javascript
复制
   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |  a,b   |
   |_________|________|
   |    2    |   c    |
   |_________|________|
EN

回答 1

Stack Overflow用户

发布于 2011-06-14 22:49:40

从一个平衡的角度来看,你也可以用CTE来做这件事,但我不认为它不如交叉应用方法好。我已经写好了这段代码,所以如果它不能工作,我深表歉意。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6344950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档