Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    28

    Unica query con più funzioni

    Salve a tutti,

    ecco il mio problema:

    Una tabella 'cliestco' ,che contiene le varie transazioni di estratto conto,con 3 campi:
    partita iva, colonna, e importo_totale.
    nel campo 'Colonna' ho o la 'D' se il cliente deve dare o la 'A' se il cliente deve avere;

    Ho bisogno di contare quante sono le partite iva aperte, cioè il cui saldo(dare-avere) è > 0;

    Ho provato a fare cosi:

    SELECT count(db2.cliestco.partita)as conteggio,
    FROM db2.cliestco
    WHERE (db2.cliestco.colonna = 'D')-(db2.cliestco.colonna = 'A')<>0
    GROUP BY db2.cliestco.partita

    ma mi viene fuori un elenco di righe con dei valori, invece di un numero intero su un unica riga che mi aspettavo..

    Cosa sbaglio?


    Ci sono altre soluzioni a questo problema?

    Grazie comunque per avere letto il post..
    La mente è come un paracadute..funziona solo se si apre!

  2. #2
    Devi fare 2 query, una per sommare tutti gli importi raggruppati per clienti dove Colonna è uguale ad A ed una dove Colonna è uguale a B.

    Poi effettui un ciclo nel quale effettui la sottrazione ed inserisci in un altro array la partita iva nel caso in cui la sottrazione abbia fornito risultato = 0.

  3. #3
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Prova così
    codice:
    select partita,sum(if(colonna="D",+importo_totale,-importo_totale)) as attivo
    from cliestco
    group by partita
    having attivo > 0

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2005
    Messaggi
    28

    grazie..

    Grazie per la risposta,

    ho provato e sembra funzionare, ma vorrei capire meglio il funzionamento della query, in particolare di questa parte:

    sum(if(colonna="D",+importo_totale,-importo_totale))

    non capisco...se prima si aggiunge importo_totale e poi si sottrae a cosa serve quella parte?
    non equivale a fare tipo +2-2??

    Grazie per la pazienza non solo nell'aiutarmi ma anche nello spiegarmi il come..

    Grazie ancora..
    La mente è come un paracadute..funziona solo se si apre!

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Viene eseguito un semplice controllo. Se il valore della colonna è uguale a D allora l'importo è positivo (+importo_totale).
    In caso contrario significa che la colonna è uguale ad A e quindi si antepone il segno - all'importo totale e questo viene sottratto. Tutti i valori, raggruppati per ciascuna partita iva vengono sommati tramite la funzione sum che si trova all'esteno dell'if.

    Una volta eseguito il raggruppamento vengono recuperati solo quelli maggiori di 0 come avevi chiesto.

    Qui trovi spiegata la sintassi dell'if

    http://dev.mysql.com/doc/refman/5.0/...ml#function_if


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.