2010-11-23 8 views
3
SELECT COUNT(w.invoiceId) AS '10 Days' FROM tbl_Invoice w 
WHERE w.invoiceId NOT IN(
SELECT inv.invoiceId FROM tbl_InvoiceAllocation inv) 
AND w.invoiceDate < DATE_SUB(curdate(), INTERVAL 10 DAY) 

Cela fonctionne correctement et retourne le nombre de toutes les factures qui ont une date de plus de 10 jours. Je souhaite maintenant renvoyer les décomptes des factures datant de plus de 20 et 100 jours dans la même requête. Donc, idéalement, la requête retourne quelque chose comme ceci:Compte MySql Mêmes colonnes multiples

10 Days 20 Days 100 Days 

350  280  90 
+0

voir cela, besoin de gauche se joindre à la même table http://stackoverflow.com/questions/2300020/mysql-multiple-counts-in-single-query –

Répondre

5

modifier le nombre à une somme, en utilisant spécifié clause WHERE comme une instruction CASE, avec des valeurs vraies que 1 et les valeurs fausses comme 0

Quelque chose comme

SELECT SUM(CASE WHEN w.invoiceDate < DATE_SUB(curdate(), INTERVAL 10 DAY) THEN 1 ELSE 0 END) AS '10 Days', 
     SUM(CASE WHEN w.invoiceDate < DATE_SUB(curdate(), INTERVAL 20 DAY) THEN 1 ELSE 0 END) AS '20 Days' 
FROM tbl_Invoice w 
WHERE w.invoiceId NOT IN( 
          SELECT inv.invoiceId 
          FROM tbl_InvoiceAllocation inv) 
AND  w.invoiceDate < DATE_SUB(curdate(), INTERVAL 20 DAY) 
+0

grâce cela a fonctionné, mais sans ET w .invoiceDate Pjn2020

Questions connexes