2017-09-21 1 views
1

J'ai deux tables mysql. Tableau: factureComment faire une requête sum pour un champ de deux tables mysql

id | billtype | amount | advid | paydate |adjid | adjdate | 
1 | electric | 10000 | 123 | 2017-01-01 | 50 | 2017-01-03 | 
2 | Water | 5000 | 124 | 2017-02-01 | 0 | 0000-00-00 | 
3 | Shirt | 500 | 125 | 2017-03-01 | 0 | 0000-00-00 | 

Tableau: avance

id | advid | amount | balance | purpose | 
1 | 123 | 50000 | 20000 | Bill | 
2 | 124 | 70000 | 10000 | Bill | 
3 | 125 | 55000 | 15000 | Uniform | 
4 | 124 | 60000 | 10000 | Bill | 

Je veux créer un menu déroulant afin que pour sélectionner les 'avance' qui ne sont pas encore réajustées (Adjid = 0 et adjdate = 0000 -00 à 00) dans le tableau: projet de loi et que le menu déroulant contiendra également la valeur totale de l'avance pour l'identification même à l'avance (de advid) comme ci-dessous:

<option>Bill-130000</option> 
<option>Uniform-55000</option> 

comme au total 130000 (70000 + 60000) avance est tak Par contre, avancez le 124, de sorte que le montant total d'avance dans le menu Option devrait être 130000 dans le cas de Bill. Mais je suis pas calculé montant total de l'avance avec précision:

SELECT sum(a.amount), purpose FROM bill as b, advance as a WHERE b.paydate!='0000-00-00' AND b.adjid!=0 AND a.advid=b.advid GROUP BY a.advid 

Montant total en <option></option> ne vient pas réelle.

Quelle serait la bonne requête dans ce but?

+0

Les résultats que vous avez obtenus sont corrects. La condition 'b.paydate! = '0000-00-00' AND b.adjid! = 0' ne donnera que' advid' = 123 de la table 'bill', donc ne vous donnera que 50000. –

+0

Typiquement, vous auriez GROUP par les colonnes non agrégées dans votre SELECT. – Strawberry

Répondre

2

Vous pouvez essayer

SELECT SUM(a.amount) AS amount, 
     MAX(purpose) AS purpose 
FROM advance a 
WHERE a.advid IN (
       SELECT b.advid 
       FROM bill b 
       WHERE b.paydate = '0000-00-00' 
         AND b.adjid = 0) 
GROUP BY a.advid 
+0

Super! Merci pour votre code. –