嵌套SQL查询,用于验证未结金额

时间:2017-01-21 17:31:59

标签: mysql sql database

我有4张桌子。

表1:Invoice_Number,Amount,OutStanding_Amount

表2:Id,金额

表3:Id,金额

表4:Id,Text,Number,Invoice_Number

示例数据:

表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  

OutStanding Amount = Amount(Invoice) - Amount(Table2) - Amount(Table3),当然相同的发票编号。

查询应输出Corrected OutStanding Amount。 在这种情况下,Correct OutStanding Amount是0而不是3000。 请注意,其中一个表格(即表2或表3)中可能没有该发票号码的输入。

概念:

  1. 浏览表1中的每一行。

  2. 从表4中挑选所有行,其中发票编号=表1中的发票编号。

  3. 从表2中获取总和(金额),其中Text ='表2'从步骤2中的行检索,id = id(从步骤2中检索)。

  4. 从表3中获取总和(金额),从第2步中Text ='表3'的行中检索到的ID,以及id = id(从步骤2中重新开始)。

  5. 在表1中添加这些金额并从金额中减去我们在步骤1中获得的金额。

  6. 检查相同的未结金额,如果不同则输出更正的OutStanding金额和发票编号。

  7. 如何将此想法转换为正确的SQL查询以获得所需的输出?

1 个答案:

答案 0 :(得分:0)

只根据发票编号查询

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'