通过分区问题

问题描述:

我有一些问题,通过分区。我想获得:通过分区问题

Desired Result

库存有序列是使用此代码的问题:

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 

我在做什么错?

First Try

+2

你的“第一次尝试”和“期望的结果”是相同的图像。 – chenjesu

+0

我输入了修改图片标签的建议编辑,但您也需要添加预期结果图片。 – SandPiper

+0

我不好,我把正确的图像。 – Blackfyre

没有足够的信息(无样本数据)的问题,告诉你,你出了问题,所以我将介绍如何调试和解决问题。

显示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.qtyordp.qtyrcvd添加到结果集。

我怀疑InventoryOrdered应该只是p.qtyord-p.qtyrcvd(无SUM需要)基于一个事实,即11200是整除1600