我有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中的每一行。
从表4中挑选所有行,其中发票编号=表1中的发票编号。
从表2中获取总和(金额),其中Text ='表2'从步骤2中的行检索,id = id(从步骤2中检索)。
从表3中获取总和(金额),从第2步中Text ='表3'的行中检索到的ID,以及id = id(从步骤2中重新开始)。
在表1中添加这些金额并从金额中减去我们在步骤1中获得的金额。
检查相同的未结金额,如果不同则输出更正的OutStanding金额和发票编号。
如何将此想法转换为正确的SQL查询以获得所需的输出?
答案 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'