Как преобразовать несколько строк в одну строку, чтобы получить сумму суммы - PullRequest
0 голосов
/ 27 мая 2019

Мне нужно будет объединить несколько строк в один ряд, чтобы получить общее количество. Мой стол выглядит так

Sublot_Number Lot_Number Qty Pallet_ID
------------- ---------- --- ---------
 S1             L1        1    P1
 S2             L2        1    P1
 S3             L3        3    P1

Мой результат должен выглядеть следующим образом

Sublot_Number  Lot_Num1 Lot_Num2 Lot_Num3 Qty_Sum Pallet_ID 
-------------  -------- -------- -------- ------- ---------
Random Number    L1       L2        L3      5        P1

Я попробовал Pivot, но не повезло. Может быть более 3-х подлотов, которые будут использоваться для одного и того же поддона, но я выберу только три подлота как Lot_Num1, Lot_Num2 и Lot_Num3

Каково было бы решение в этой ситуации.

1 Ответ

1 голос
/ 27 мая 2019

Вы можете использовать условное агрегирование (или pivot), но ключом является row_number():

select rand(checksum(newid())) as sublot_number,
       pallet_id,
       max(case when seqnum = 1 then lot_number end) as lot_num1,
       max(case when seqnum = 2 then lot_number end) as lot_num2,
       max(case when seqnum = 3 then lot_number end) as lot_num3,
       sum(qty)
from (select t.*,
             row_number() over (partition by pallet_id order by (select null)) as seqnum
      from t
     ) t
group by pallet_id;

Если вы хотите, чтобы сумма количества была только для трех выбранных лотов, тодобавьте where seqnum <= 3 к внешнему запросу.

Если у вас есть какой-то приоритет, например, самые большие количества, используйте его для order by.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...