动态查找未付发票

Dynamically find unpaid invoices

提问人:Ijaz 提问时间:4/5/2022 最后编辑:Thom AIjaz 更新时间:4/5/2022 访问量:133

问:

如何从下表中动态查找未付发票:

发票表

InvoiceID,  Date        CustomerID,     Amount
1           06/01/2022      1           5000.00
2           08/03/2022      1           4000.00
3           08/25/2022      1           3000.00
4           09/05/2022      1           4500.00
5           09/25/2022      1           4500.00
6           010/10/2022     1           2000.00
7           11/20/2022      1           2500.00

付款表:-

PaymentID    Date       CustomerID      Amount
1           06/10/2022      1           3000.00     
2           06/25/2022      1           4000.00
3           07/15/2022      1           2000.00
4           09/10/2022      1           3000.00
5           10/22/2022      1           4000.00
6           10/24/2022      1           1500.00
7           10/28/2022      1           1000.00
8           11/14/2022      1            500.00
sql-服务器

评论

1赞 Sergey 4/5/2022
首先,我想,您需要描述“未付发票”的含义
0赞 Squirrel 4/5/2022
您如何将付款与发票相匹配?
0赞 Thom A 4/5/2022
你想动态地做到这一点是什么意思?
0赞 Ijaz 4/5/2022
我们必须通过 CustomerID 匹配付款。没有发票参考。
0赞 Nick.Mc 4/5/2022
您至少需要描述您的业务规则。你只做精确匹配吗?

答:

1赞 mikkapy 4/5/2022 #1

尝试从这个开始:

SELECT I.CustomerID
     , I.AmountTotal-ISNULL(P.AmountTotal,0) as AmountDiff
  FROM
     ( SELECT CustomerID
            , SUM(Amount) AmountTotal
         FROM <invoices_table>
        GROUP
           BY CustomerID
     ) I
 LEFT
OUTER 
 JOIN
    ( SELECT CustomerID
           , SUM(Amount) AmountTotal
        FROM <payments_table>
       GROUP
          BY CustomerID
    ) P
   ON I.CustomerID = P.CustomerID
WHERE I.AmountTotal <= P.AmountTotal