2014-04-24 4 views
-4

tables: entreprises3 tables différentes requêtes SQL

ID | companyName 
................................ 
1 | company1 
2 | company2 
3 | company3 
4 | company4 

tableau: facture

ID | companyID 
................................ 
1 | 1 
2 | 1 
3 | 3 
4 | 2 

table: invoiceinput

ID | invoiceID | inputTotal 
................................ 
1 | 1 | 100 
2 | 1 | 200 
3 | 1 | 123 
4 | 3 | 211 

le total sur le terrain est

pour décrire: I avoir la base des entreprises dans ta ble "entreprises", factures (dans le tableau "facture") notez que plusieurs factures peuvent être appliquées à une entreprise, et le contenu de la facture (dans la facture). Plusieurs éléments de facture peuvent être appliqués à une facture. il y a une clé étrangère sur invoice.companyID à companies.ID, et sur invoiceinput.invoiceID à invoice.ID.

donc je veux résultat comme ceci:

companyName | sum of totals 
............................................... 
company1 | 423 
company2 | 0 
company3 | 0 
company4 | 211 

si la somme de la colonne des totaux devrait contenir des données est la somme de tous les totaux qui sont toutes les factures qui est fait pour une certaine compagnie

J'espère Je l'ai bien décrit.

+3

Montrez vos tentatives. – Mihai

+0

Etes-vous sûr que la société 3 a 0 somme? Il me semble que vous avez confondu company4 pour company3. – Mihai

+2

Il s'agit d'une requête 'join' plutôt basique avec un' group by'. Qu'avez-vous essayé? –

Répondre

1

Essayez ceci:

Pour 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 

Pour SQL Server, remplacez IFNULL avec ISNULL.

Résultat:

COMPANYNAME SUMOFTOTAL 
company1  423 
company2  0 
company3  211 
company4  0 

voir le résultat en SQL Fiddle.

+0

merci travaux parfaits. – funny