ciao, io ho una struttura di questo tipo (abbreviata, tolgo i dati che non servono):
tabella prev:
id data
1 0808
2 0808
3 0809
4 0809
5 0810
6 0810
tabella pay:
id idPrev stato
1 1 0
2 1 0
3 1 1
4 2 0
5 2 1
6 2 1
7 3 1
8 3 1
9 4 1
10 4 1
11 5 1
12 5 1
13 5 1
14 6 0
dove, in pratica, pay.stato indica se il pagamento è ricevuto si o no.
La query che mi serve a me, dovrebbe restituirmi le date raggruppate (annomese decorrenza), due colonne:
una con il numero di fatture con TUTTI i pagamenti a stato = 1, l'altra con il numero delle fatture che non hanno tutti i pagamenti conclusi.
con i dati sopra, dovrei ottenere questo risultato:
data | fattureOK | fattureNo |
0810 | 1 | 1 |
0809 | 2 | 0 |
0808 | 0 | 2 |
come cavolo faccio?
è possibile?
io ho fatto delle prove:
ma così ho riga per riga le fatture con il numero di pagamenti conclusi, da concludere e il totale (il raggruppamento per data mi sfracella i dati, mettendolo in quella query)Codice PHP:
SELECT
prev.id,
( SELECT COUNT(pay.id) FROM pay WHERE pay.stato = '0' AND pay.idPrev = prev.id ) AS payNo,
( SELECT COUNT(pay.id) FROM pay WHERE pay.stato = '1' AND pay.idPrev = prev.id ) AS payOk,
( SELECT COUNT(pay.id) FROM pay WHERE pay.idPrev = prev.id ) AS payTOT
FROM prev
INNER JOIN pay ON (pay.idPrev = prev.id)
GROUP BY prev.id
ho provato con:
ma mi restituisceCodice PHP:
SELECT
prev.data,
( SELECT
COUNT(prev.id)
FROM prev
HAVING ( SELECT COUNT(pay.id) FROM pay WHERE pay.stato = '1' AND pay.idPrev = prev.id ) = ( SELECT COUNT(pay.id) FROM pay WHERE pay.idPrev = prev.id )
) AS fattureOk,
( SELECT
COUNT(prev.id)
FROM prev
HAVING ( SELECT COUNT(pay.id) FROM pay WHERE pay.stato = '0' AND pay.idPrev = prev.id ) != 0
) AS fattureNo
FROM prev
INNER JOIN pay ON (pay.idPrev = prev.id)
GROUP BY prev.data
data fattureOk fattureNo
0808 NULL 6
0809 6 NULL
0810 6 NULL
idee?