SQL查询以逗号分隔符以及SQL Server中的按列获取汇总结果

问题描述

| 我需要在表上编写一个sql查询,以便结果将具有按列分组以及带有逗号分隔符的聚合列。 我的表格将采用以下格式
   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |   a    |
   |_________|________|
   |    1    |   b    |
   |_________|________|
   |    2    |   c    |
   |_________|________|
预期结果应采用以下格式
   |`````````|````````|
   |    ID   |  Value |
   |_________|________|
   |    1    |  a,b   |
   |_________|________|
   |    2    |   c    |
   |_________|________|
    

解决方法

        您想使用
FOR XML PATH
构造:
select 
    ID,stuff((select \',\' + Value 
           from YourTable t2 where t1.ID = t2.ID 
           for xml path(\'\')),1,2,\'\') [Values]
from YourTable t1
group by ID
STUFF
功能是摆脱开头的
\',\'
。 您还可以在此处查看其他示例: 两个表之间的SQL相同单位需要1个单元格中的订单号 SQL和Coldfusion左连接表在一列中以列表形式获取重复结果     ,        仅出于平衡的观点,您也可以使用CTE进行此操作,但是它不如我认为的交叉应用方法好。我已经对蹄的编码进行了编码,如果无法使用,请您道歉。
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.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
    

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...