我有4张桌子。

表1:发票编号,金额,超出金额

表2:编号,金额

表3:编号,金额

表4:编号,文字,编号,发票编号

示例数据:

表格1:

    1001, 5000,3000


表2:

     6, 2000
     10,1000


表3:

     8, 2000


表4:

     1,Table_2,6,1001
     2,Table_3,8,1001
     3, Table_2,10,1001


对于相同的发票编号,超出金额=金额(发票)-金额(表2)-金额(表3)。

查询应输出更正的超出额。
在这种情况下,正确的超出金额为0,而不是3000。
请注意,其中一个表(即表2或表3)可能没有该发票编号的条目。

概念:


遍历表1中的每一行。
从表4中选择所有行,其中发票号=来自表1的发票号。
从表2条目中获取sum(Amount),其中Text ='Table 2'从步骤2中的行中检索,并且id = id(从step2中检索)。
从id中获取表3项的sum(Amount),这些ID是从第2步中Text ='Table 3'且id = id(从step2得出)的行中检索的。
将这些金额相加并从步骤1中获得的表1中的金额中减去。
将其与未付金额核对,如果不同,则输出更正的未付金额和发票编号。


如何将这个想法转换为适当的SQL查询以获得所需的输出?

最佳答案

只需根据发票编号查询

select t1.invoice_number,Case WHEN t1.Outstanding_amount=(t1.amount-t2.amount-t3.amount) Then t1.Outstanding_amount ELSE  (t1.amount-t2.amount-t3.amount) from table_1 t1
join table_4 t4 on t1.Invoice_number=t4.Invoice_number
Join table_2 t2 on t4.text=t2.ID
Join Table_3 t3 on t4.text=t3.id where t1.Invoice_number='1001'

关于mysql - 嵌套SQL查询并验证未付金额,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41782377/

10-13 05:59