2017-07-14 41 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