通过分区问题
问题描述:
我有一些问题,通过分区。我想获得:通过分区问题
库存有序列是使用此代码的问题:
select
l.whseloc,l.invtid,
l.qty,
case when f.MRPFlag= 0 then 'NON-Usable' else 'Usable' end as NetStatus,
SUM(p.qtyord-p.qtyrcvd) over (Partition by l.invtid) as InventoryOrdered,
SUM(l.qty*f.mrpflag)over(partition by l.invtid) as TotalNet
from location l (nolock)
join inventory i (nolock) on l.invtid=i.invtid
join loctable f (nolock) on l.whseloc=f.whseloc
left join [dbo].[opspurord] p (nolock) on l.InvtID=p.InvtID
我在做什么错?
答
没有足够的信息(无样本数据)的问题,告诉你,你出了问题,所以我将介绍如何调试和解决问题。
显示PARTITION BY
结果集中的列和聚合列作为单独的列,同时保持其他所有内容相同。
select l.whseloc, l.invtid, l.qty,
case when f.MRPFlag= 0 then 'NON-Usable' else 'Usable' end as NetStatus,
SUM(p.qtyord-p.qtyrcvd) over (Partition by l.invtid) as InventoryOrdered,
p.qtyord-p.qtyrcvd AS InventoryOrderedRowSUM
SUM(l.qty*f.mrpflag)over(partition by l.invtid) as TotalNet,
l.qty*f.mrpflag AS TotalNetRowSUM
from location l (nolock)
...
ORDER BY l.invtid -- Add Order BY to make it easier to analyse data
l.invtid
- 这将告诉你它通过SUM
功能 InventoryOrderedRowSUM
总结行组 - 显示每个行所产生的价值。如果您为给定的l.invtid
手动合计这些值,则您应该得到与InventoryOrdered
相同的结果。
哪里何去何从:
通过查看个人InventoryOrderedRowSUM
你应该能够告诉这些值的组合给你想要的结果。一旦你解决了这个问题,你可以调整你的InventoryOrdered
功能。如果这不明显,那么您需要重复上述过程,同时将p.qtyord
和p.qtyrcvd
添加到结果集。
我怀疑InventoryOrdered
应该只是p.qtyord-p.qtyrcvd
(无SUM
需要)基于一个事实,即11200是整除1600
你的“第一次尝试”和“期望的结果”是相同的图像。 – chenjesu
我输入了修改图片标签的建议编辑,但您也需要添加预期结果图片。 – SandPiper
我不好,我把正确的图像。 – Blackfyre