Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    [MYSQL] Problema UNION con una select non soddisfatta

    Salve amici,

    vorrei unire due select sulla stessa tabella con condizioni diverse.
    Mi spiego meglio:

    Ho una tabella con le ricevute emesse da un ristorante, in cui c'è anche un campo relativo ai coperti fatti.
    In base all'ora di emissione della ricevuta voglio calcolare il totale dei coperti del pranzo e della cena con una sola query....

    Pensavo a questo:

    codice:
    SELECT SUM(COPERTI) AS TOT_PCOP FROM quinto_comanda WHERE GIORNO = '"&ADESSO&"' AND ORARIO BETWEEN '01:30:00' AND '19:00:00' GROUP BY GIORNO UNION ALL SELECT SUM(COPERTI) AS TOT_CCOP FROM quinto_comanda WHERE GIORNO = '"&ADESSO&"' AND ORARIO BETWEEN '19:30:00' AND '23:59:59' OR ORARIO BETWEEN '00:00:00' and '01:25:00' GROUP BY GIORNO
    Che mi dovrebbe restituire i campi TOT-PCOP (coperti del pranzo) e TOT_CCOP (totale coperti della cena).
    Il problema è che se una delle due select è vuota non riesco a gestire i valori!
    O meglio, come controllo se tutti e due i campi esistono?

    Esiste un modo affinchè si creino cmq i due campi ed in caso uno sia vuoto venga impostato su 0?
    Digital XP - The new expression of digital art! - http://www.mimanchitu.it

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Con mysql puoi usare sia IFNULL che COALESCE

  3. #3

    scusa

    scusa ma non conosco questi comandi....volendoli applicare alla query che ho postato?!
    Digital XP - The new expression of digital art! - http://www.mimanchitu.it

  4. #4
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    select IFNULL(campo,0)
    select COALESCE(campo,0)

    select ifnull(sum(qualcosa),0)
    ...

    la prima è una funzione specifica, che ritorna il secondo parametro se il primo è vuoto (è specifica di mysql)

    La seconda (standard) ritorna il primo valore non null nella lista che le passi

  5. #5
    Ho scritto così:

    codice:
    SELECT COALESCE(SUM(COPERTI), 0) AS TOT_PCOP FROM quinto_comanda WHERE GIORNO = '2013-01-05' AND ORARIO BETWEEN '01:30:00' AND '19:00:00' GROUP BY GIORNO
    UNION
    SELECT COALESCE(SUM(COPERTI), 0) AS TOT_CCOP FROM quinto_comanda WHERE GIORNO = '2013-01-05' AND ORARIO BETWEEN '19:30:00' AND '23:59:59' OR ORARIO BETWEEN '00:00:00' and '01:25:00' GROUP BY GIORNO
    Provato direttamente da mysql ma mi restituisce solo il campo TOT_PCOP (visto che l'altra select è vuota!
    Digital XP - The new expression of digital art! - http://www.mimanchitu.it

  6. #6
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    E' sbagliata perchè la UNION si limita a giustapporre le righe, accodandole.
    Quindi anche se chiami con due nomi diversi i campi, sempre uno ne avrai, e coalesce / ifnull agiranno sempre su quello.

    Devi sdoppiare, ad esempio così
    codice:
    select coalesce(sum(imponibile),0) as sommauno,0 as sommadue from test where blablabla
    union
    select 0 as sommauno, coalesce(sum(imponibile),0) as sommadue from documenti where blablabla
    Otterrai due colonne di una o due righe

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 © 2026 vBulletin Solutions, Inc. All rights reserved.