我们假设我有下表。
|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,为项目123,234和345创建了一个采购订单(po_num)。每个项目都有不同的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 :(得分: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