Вы можете использовать условное агрегирование (или 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
.