我将需要将多行合并为一行以获得总数。我的桌子看起来像这样
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
在这种情况下将是什么解决方案。
答案 0 :(得分:1)
您可以使用条件聚合(或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
。