SQL中的交易,发票和单据关系

时间:2019-04-24 14:07:03

标签: sql sql-server tsql

我在计算交易和关系查询时遇到麻烦。

所以我有 documents 表:(id,名称,total_value,id_partner)

关系 表:(id_parent,id_child,值)。

文档 表存储交易和发票 关系 表存储交易和发票之间的关系

一笔交易可以支付多张发票。

到目前为止,我得到的是:

SELECT  DCS.ID,
    DCS.ID_PARTNER,
        DCS.TOTAL_VALUE,
        COALESCE(ASDR.[PAID], 0) [PAID_VALUE],
        (DCS.TOTAL_VALUE - COALESCE(ASDR.[PAID], 0)) [UNPAID_VALUE]
        FROM DOCUMENTS DCS

LEFT JOIN (SELECT SDR.ID_PARENT, SUM(SDR.VALUE) [PAID] FROM RELATIONS SDR GROUP BY SDR.ID_PARENT) ASDR ON (DCS.ID = ASDR.ID_PARENT)

WHERE  DCS.ID_PARTNER = 25

我的查询应按当前交易和合作伙伴返回已付款的发票,以及当前合作伙伴的未付款的发票。

如果发票由另一笔交易全额支付,则不应在当前交易中显示。

如果发票由另一笔交易部分支付,则应在当前交易中显示。

我还必须退还发票的总付款额。

SQL小提琴 http://sqlfiddle.com/#!18/76bce/2

1 个答案:

答案 0 :(得分:0)

我会做类似的事情:

select
  d.*,
  coalesce(sum(r.value), 0) as paid_value,
  d.total_value - coalesce(sum(r.value), 0) as unpaid_value
from documents d
left join relations r on r.id_parent = d.id
where d.id_partner = 25
group by d.id