表:公司
ID | companyName
................................
1 | company1
2 | company2
3 | company3
4 | company4
表:发票
ID | companyID
................................
1 | 1
2 | 1
3 | 3
4 | 2
表:invoiceinput
ID | invoiceID | inputTotal
................................
1 | 1 | 100
2 | 1 | 200
3 | 1 | 123
4 | 3 | 211
字段总数
描述:我在表“公司”中有公司基数,发票(在表“发票”中)注意,可以将一些发票应用于一个公司,并将发票内容(在invoiceinput表中)。几个invoiceinput项目可以应用于一个发票。 invoice.companyID上的外键是companies.ID,invoiceinput.invoiceID是invoice.ID。
所以我想要这样的结果:
companyName | sum of totals
...............................................
company1 | 423
company2 | 0
company3 | 0
company4 | 211
因此,总计列的总和应包含的数据是所有发票中所有总计的总和,该数据是针对某个公司的。
我希望我描述得很好。
答案 0 :(得分:1)
试试这个:
对于MySQL:
SELECT Com.CompanyName,IFNULL(SUM(InvIn.InputTotal),0) as SumOfTotal
FROM companies Com LEFT JOIN
Invoice Inv ON Inv.CompanyID=Com.ID LEFT JOIN
InvoiceInput InvIn ON InvIn.InvoiceID=Inv.ID
GROUP BY Com.CompanyName
ORDER BY Com.CompanyName
对于SQL Server,将IFNULL
替换为ISNULL
。
结果:
COMPANYNAME SUMOFTOTAL
company1 423
company2 0
company3 211
company4 0
请参阅SQL Fiddle中的结果。