首页 > 解决方案 > 基于 Microsoft SQL Server 中的模式与 groupby 一起使用时如何连接行?

问题描述

我有一个例子:

在此处输入图像描述

我希望它看起来像这样:

在此处输入图像描述

几乎,金额列中的值后面会有空单元格。我想将这些行的注释单元格与空单元格连接起来。我不知道该怎么做。有没有办法做到这一点?

标签: sqlsql-server

解决方案


如果金额列中的值后面有空单元格(如您所说),您可以使用 ROW_NUMBER() 获取 cte 中的唯一编号,然后计算每行的总和(按新唯一编号排序)(将是一个金额相同)。最后,在 FOR XML PATH() 中使用 cte。

--getting Sum as unique for every sequence (Amount and following values)
with cte AS
(

select Id,Amount,Number,sum(Amount)over(order by Number rows unbounded preceding)SumSeq,comment
from
 (
   select Id,Amount,comment,
   row_number()over(order by Id)Number from Table
 )x

)

 select id,max(Amount),ConcatComments from
  (
    select id,SumSeq,Amount, 
    stuff((select Concat(',',comment) 
    from cte cte1 where cte1.SumSeq=cte2.SumSeq 
    for xml path('')),1,2,'') ConcatComments from cte cte2
 )Z
 group by SumSeq,id,ConcatComments

推荐阅读