Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20

    Clausola IF in query mySQL

    ciao a tutti, ho appena scoperto che possono essere inseriti degli IF nelle query SQL ma non riesco a farne uno per il mio caso, mi spiego...

    ho questa query:
    SELECT ID, ID_CLIENTE, SUM(TOTALE) FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE

    (ignorate l'obrobrio su scadenze like '%/08/%', per ora lo lascierò così poi lo modificherò, purtroppo ho salvato il campo scadenze come String e non come DATE)

    La query mi seleziona i campi raggruppandomeli per cliente e, quindi, nel caso ad un cliente siano associate più fatture me le raggruppa sommando i totali.
    Io vorrei che mi si aggiungesse una colonna AGGREGATI settata a 1 se effettivamente la somma sia stata fatta, altrimenti lo setti a 0
    Ho letto come utilizzare l'IF ma non credo sia possibile farci quello che voglio, qualcuno ha qualche idea?

    Grazie!!

  2. #2
    Quote Originariamente inviata da Giovas91 Visualizza il messaggio
    ...
    Io vorrei che mi si aggiungesse una colonna AGGREGATI settata a 1 se effettivamente la somma sia stata fatta, altrimenti lo setti a 0
    Ciao,
    il problema non è molto chiaro;
    posta un esempio semplificato con struttura della tabella e dati
    (pochi ma significativi per la comprensione del problema)
    ed il risultato desiderato

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova questo

    SELECT ID, ID_CLIENTE, CASE WHEN SUM(TOTALE) > 0 THEN 1 ELSE 0 END FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20
    Quote Originariamente inviata da sspintux Visualizza il messaggio
    Ciao,
    il problema non è molto chiaro;
    posta un esempio semplificato con struttura della tabella e dati
    (pochi ma significativi per la comprensione del problema)
    ed il risultato desiderato
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Prova questo

    SELECT ID, ID_CLIENTE, CASE WHEN SUM(TOTALE) > 0 THEN 1 ELSE 0 END FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE
    grazie ad entrambi per la risposta, ho provato ad usare questa istruzione ma non va bene, io vorrei che mi mettesse la colonna AGGREGATI ad 1, se e solo se è stata effettivamente effettuata la somma, mi spiego...

    eseguendo la query senza la clausola GROUP BY otterrei che, se il cliente Tizio ha associate più fatture nella mia tabella finale avrei più righe con ID_CLIENTE uguale. Eseguendo la clausola GROUP BY unita con la SUM invece queste tre righe diventerebbero una e in TOTALE avrei la somma di tutti i totali delle fatture, fino a qui ci siamo e va benissimo.
    Io vorrei che, solo nel caso in cui sia stato eseguito un GROUP BY, e quindi erano presenti originariamente più righe con lo stesso ID_CLIENTE, in questo caso mi si setti la colonna AGGREGATI ad 1.
    In pratica mi serve perchè quando andrò a stampare successivamente un foglio con le fatture, quelle associate allo stesso cliente verranno raggruppate e in quel caso non scriverò l'ID della fattura associato perchè ne comprende più di una.

    Spero di essermi spiegato, grazie ancora per l'aiuto

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    codice HTML:
    SELECT ID, ID_CLIENTE, CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END as Aggregati FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20
    cosi mi funziona ma dovrei aggiungere la SUM(TOTALE) giusto?

    EDIT: esatto aggiungendo SUM(TOTALE) ho ottenuto quello che volevo!
    La posto sperando che possa tornare utile a qualcuno:

    SELECT ID, ID_CLIENTE, SUM(TOTALE), CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END as Aggregati FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE

    Grazie per l'aiuto sei stato molto gentile e veloce!!

  7. #7
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    si
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  8. #8
    Quote Originariamente inviata da Giovas91 Visualizza il messaggio
    cosi mi funziona
    ...
    La posto sperando che possa tornare utile a qualcuno:

    SELECT ID, ID_CLIENTE, SUM(TOTALE), CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END as Aggregati FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE
    nota che se un cliente ha una sola fattura da pagare verrà Aggregati=0 nonostante sia stato eseguito il group by di cui parli.
    ... vedi tu se ti va bene

  9. #9
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    20
    si è corretto, se ha una sola fattura il TOTALE corrisponde al totale dell'unica fattura associata a lui.
    in pratica io voglio AGGREGATI=1 solo se un cliente ha più fatture, in caso contrario AGGREGATI=0.

    Sempre che io abbia capito la tua domanda, mi confermi

  10. #10
    Quote Originariamente inviata da badaze Visualizza il messaggio
    codice HTML:
    SELECT ID, ID_CLIENTE, CASE WHEN COUNT(*) > 1 THEN 1 ELSE 0 END as Aggregati FROM `fattura` WHERE pagato=0 and pagamento like 'R.I.B.A.%' and scadenze like '%/08/%' GROUP BY ID_CLIENTE
    ... ma non dovrebbe dare errore visto che manca il campo ID nella GROUP BY

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.