2017-07-14 130 views
1

让我们假设我有下表。如何处理完成时的负值

|item_no | po_num | line_num | recv_qty | req_qty | 
|--------|--------|----------|----------|---------| 
|123  | 001 | 10  | 10  | 10  | 
|234  | 001 | 20  | 25  | 30  | 
|345  | 001 | 30  | 80  | 80  | 
|345  | 001 | 30  | -80  | 80  | 
|567  | 002 | 10  | 40  | 10  | 
|789  | 002 | 20  | 55  | 30  | 
|987  | 002 | 30  | -70  | 70  | 

在这种情况下,这是什么代表的是,对于项目123一个采购订单(po_num)是为项目123,234和345创造有每个项目不同的LINE_NO。

在po_num = 001的情况下,line_num返回给供应商,因此有两个条目po_num = 001和line_num = 30,其中一个负的rev_qty指示已返回订单。

还有一种情况,对于项目987,只有一个条目的负值rev_qty表示订单已退回。

我需要的是能够给我recv_qty和req_qty的总和的查询,这样我就可以得到比率并查看提供者是否正确地完成了采购订单。我需要能够处理这两种情况。我相信在第二种情况下,如果我添加“where recv_qty> = 0”就足够了,因为我有兴趣知道提供者是否未提供订单,而不一定返回。我正在创建一个处理这两种情况的查询。任何帮助将不胜感激。

+0

@青峰我们都在同一时间进行编辑,对不起 –

+4

因此,考虑你的数据你有什么期待输出? –

+0

@SeanLange req_qty的总和,recv_qty和recv_qty/req_qty * 100的总和,所以我可以得到供应商满足的req_qty的百分比。 –

回答

0

不确定你在找什么,但这里是一个猜测。

declare @Something table 
(
    item_no int 
    , po_num char(3) 
    , line_num int 
    , recv_qty int 
    , req_qty int 
) 

insert @Something 
values 
(123, '001', 10, 10, 10) 
,(234, '001', 20, 25, 30) 
,(345, '001', 30, 80, 80) 
,(345, '001', 30, -80, 80) 
,(567, '002', 10, 40, 10) 
,(789, '002', 20, 55, 30) 
,(987, '002', 30, -70, 70) 

select item_no 
    , po_num 
    , sum(case when recv_qty > 0 then recv_qty else 0 end) as QuantitySold 
    , sum(case when recv_qty < 0 then ABS(recv_qty) else 0 end) as QuantityReturned 
from @Something 
group by item_no 
    , po_num