postgresql

时间:2015-08-17 11:19:43

标签: sql postgresql

我有以下表格:

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 ....

此查询为我提供了特定qtyitemid clientid的总和,无论它是哪个投放。如何更改它以便考虑delivryid?我需要这样的东西:

coalesce( SUM(a.qty) OVER (PARTITION BY a.itemid) FROM B where deliveryid<>b.deliveryid ,0) AS qtyOther

有任何建议怎么做?

注意:我无法更改WHERE中的条件。

1 个答案:

答案 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