我有以下表格:
A
分娩
delveryid clientid deliverydate
1 10 2015-01-01
2 10 2015-02-02
3 11 2015-04-08
deliveris中的 B
个项目
itemid deliveryid qty status
70 1 5 1
70 1 8 2
70 2 10 1
72 1 12 1
70 3 100 1
我需要在我的查询中添加一个列,它给出了同一客户端其他传递中每个部分的数量。
意味着对于client 10
和交付id 1
的给定数据,我需要显示:
itemid qty status qtyOther
70 5 1 10 //itemid 70 exists in delivery 2
70 8 2 10 //itemid 70 exists in delivery 2
72 12 1 0 //itemid 72 doesn't exists in other delivery of client 11
由于我需要将qtyOther
添加到我现有的qry中,我试图避免使用Group By,因为这是一个巨大的查询,如果我在select中使用SUM
,我将必须按所有项目分组在选择。
这是我到目前为止所做的:
Select ....., coalesce( SUM(a.qty) OVER (PARTITION BY a.itemid) ,0) AS qtyOther
FROM B b
LEFT JOIN A a USING
LEFT JOIN (other tables)
WHERE clientid=10 ....
此查询为我提供了特定qty
每itemid
clientid
的总和,无论它是哪个投放。如何更改它以便考虑delivryid?我需要这样的东西:
coalesce( SUM(a.qty) OVER (PARTITION BY a.itemid) FROM B where deliveryid<>b.deliveryid ,0) AS qtyOther
有任何建议怎么做?
注意:我无法更改WHERE
中的条件。
答案 0 :(得分:1)
我认为您只想减去当前交付的总额:
Select .....,
(coalesce( SUM(a.qty) OVER (PARTITION BY a.itemid), 0) -
coalesce( SUM(a.qty) OVER (PARTITION BY a.itemid, a.deliveryid), 0)
) as qtyOther