SQL считать и комбинировать - PullRequest
0 голосов
/ 23 октября 2019

Я настраиваю запрос, чтобы изменить данные формы, посчитать данные и отформатировать их. На данный момент у меня есть таблица с вертикальными данными. Данные показаны на рисунке ниже. enter image description here

То, что я хочу сделать, - это создать Группу по номеру, после этого посчитать, сколько раз существует конкретный TypePak, и разделить его вправо. Как показано на рисунке справа.

Я пытался сделать Pivot, и это помогло частично, но это не очень хороший метод. Тогда я попробовал XML Path.

PIVOT

FROM            dbo.des_ombouw
GROUP BY Number, typePak) src
pivot 
(
    max(Expr1)
    for typePak in ([COLLI],[DOOS],[pallet],[Envelop])
) piv1

XML Path

  select distinct Number, abc = STUFF(( 
    select ',' + TypePak 
    from des_ombouw t1
    where t1.Number = t2.Number
    FOR XML PATH ('')),1,1,'')
from des_ombouw t2

На картинке это то, что я хочу. Есть еще столбцы, которые нужно добавить, например, вес какой-либо упаковки. Одной из проблем также является то, что появляется больше столбцов, так что это еще не все!

1 Ответ

0 голосов
/ 23 октября 2019

Два шага агрегации с row_number() могут делать то, что вы хотите:

select d.number,
       max(case when seqnum = 1 then cnt end) as cnt_1,
       max(case when seqnum = 1 then typepak end) as typepak_1,
       max(case when seqnum = 2 then cnt end) as cnt_2,
       max(case when seqnum = 2 then typepak end) as typepak_2,
       max(case when seqnum = 3 then cnt end) as cnt_3,
       max(case when seqnum = 3 then typepak end) as typepak_3,
       max(case when seqnum = 4 then cnt end) as cnt_4,
       max(case when seqnum = 4 then typepak end) as typepak_4
from (select d.number, d.typepak, count(*) as cnt,
             row_number() over (partition by d.number order by count(*) desc) as seqnum
      from dbo.des_ombouw d
     ) d
group by d.number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...