Как объединить строки при использовании с groupby на основе шаблона в Microsoft SQL Server? - PullRequest
0 голосов
/ 05 августа 2020

У меня есть пример:

enter image description here

I want it to look like this:

введите описание изображения здесь

По сути, после значения в столбце Amount будут пустые ячейки. Я хочу объединить ячейки комментариев этих строк с пустыми ячейками. Я не знаю, как это сделать. Есть ли способ сделать это?

Ответы [ 3 ]

3 голосов
/ 05 августа 2020

Если после значения в столбце Amount будут пустые ячейки (как вы сказали в вопросе), вы можете использовать ROW_NUMBER (), чтобы получить уникальный номер в cte, а затем вычислить сумму (упорядочить по новым уникальным числам) для каждой строки ( будет одинаковым для одной суммы). И, наконец, используя cte в FOR XML PATH ().

--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
0 голосов
/ 05 августа 2020

В ваших данных нет столбца, определяющего порядок, но результаты, похоже, зависят от порядка. Если у вас есть такой столбец, вы можете назначить группировку, подсчитав не- NULL значения amount для каждого id, а затем агрегировать. Это будет:

select id, grp,
       string_agg(comment, ', ') within group (order by <ordering column>) as comments
from (select t.*, count(amount) over (partition by id order by <ordering column>) as grp
      from t
     ) t
group by id, grp;
0 голосов
/ 05 августа 2020

Вы можете использовать функцию STRING_AGG , чтобы объединить комментарии. Примерно так:

Select ID, MAX(Amount) as Amount, STRING_AGG(Comment, ', ') as Comment
From [YourTable]
Group By ID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...