Visualizzazione dei risultati da 1 a 10 su 10

Discussione: Somma di righe alterne

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11

    Somma di righe alterne

    Salve a tutti
    qualcuno mi può aiutare con questa query in SQL

    io ho una tabella che rappresenta la contabilità generale di una azienda, in particolare ci sono 3 colonne che mi interessano, uno è l'importo in € ,l'altra è il segno che può assumere due valori (A->avere, D->dare) e la terza è il numero documento.

    io vorrei ottenere con la query una nuova tabella in cui in base al numero documento ho :

    ndoc | dare | avere
    --------------------------------------------------
    somma degli somma degli
    importo in importi in
    dare avere

    quello che ho ottenuto fino ad ora è una tabella in cui a righe alterne in dare è avere ho dei buchi del tipo:

    ndoc avere dare

    100 50
    100 50


    come posso fare?

  2. #2
    Ciao,
    che database stai usando?
    posta anche la select che hai creato per il momento...

    se ho capito bene tu vuoi ottenere qualcosa del tipo:

    ndoc | dare | avere
    -------------------------
    ndoc1 | somma(dare) del doc1 | sum(avere) del doc1
    ndoc2 | somma(dare) del doc2 | sum(avere) del doc2
    ndoc3 | ssomma(dare) del doc3 | sum(avere) del doc3

    giusto?

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    si proprio così
    sto usando postgresql
    in questo momento la query che avevo fatto l'ho persa, appena la rifaccio la posto

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    codice:
    SELECT 
    registrazionicoge.ndoc,
    registrazionicoge.segno,
    (CASE segno
    WHEN 'D' THEN SUM(importo) 
    END) AS DARE,
    (CASE segno
    WHEN 'A' THEN SUM(importo) 
    END) AS AVERE
    
    FROM registrazionicoge,registroiva
    WHERE registroiva.codice='100189'
    AND registroiva.nreg=registrazionicoge.nreg
    GROUP BY
    registrazionicoge.segno,
    registrazionicoge.ndoc
    ORDER BY
    registrazionicoge.ndoc
    il codice è riferito al cliente , nreg sta per numero di registrazione

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    Allego l'immagine del risultato

  6. #6
    Nn ho postgresql e non la posso provare
    ma a occhio mi pare che basti togliere il secondo campo (registrazionicoge.segno)
    perché intanto è già implicito nei campi dare e avere

    codice:
    SELECT 
    registrazionicoge.ndoc,
    (CASE segno
    WHEN 'D' THEN SUM(importo) 
    END) AS DARE,
    (CASE segno
    WHEN 'A' THEN SUM(importo) 
    END) AS AVERE
    
    FROM registrazionicoge,registroiva
    WHERE registroiva.codice='100189'
    AND registroiva.nreg=registrazionicoge.nreg
    GROUP BY
    registrazionicoge.segno,
    registrazionicoge.ndoc
    ORDER BY
    registrazionicoge.ndoc

    così dovresti ottenere tuttu su una linea
    vedi se funzione

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    No non cambia niente.

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    Ho già provato a togliere le varie voci da GROUP BY ma il risultato è sempre lo stesso

  9. #9
    aspetta quella che volevo dire prima era questa

    codice:
    SELECT 
    registrazionicoge.ndoc,
    (CASE segno
    WHEN 'D' THEN SUM(importo) 
    END) AS DARE,
    (CASE segno
    WHEN 'A' THEN SUM(importo) 
    END) AS AVERE
    
    FROM registrazionicoge,registroiva
    WHERE registroiva.codice='100189'
    AND registroiva.nreg=registrazionicoge.nreg
    GROUP BY
    registrazionicoge.ndoc
    ORDER BY
    registrazionicoge.ndoc
    cioè senza registrazionicoge.segno neanche nel goup by


    se non funziona prova ancora usando la tua sub query come subquery di una più generale, così:
    codice:
    SELECT DOC, SUM(DARE), SUM(AVERE) 
    FROM
    (
    SELECT 
    registrazionicoge.ndoc AS DOC,
    (CASE segno
    WHEN 'D' THEN SUM(importo) 
    END) AS DARE,
    (CASE segno
    WHEN 'A' THEN SUM(importo) 
    END) AS AVERE
    FROM registrazionicoge,registroiva
    WHERE registroiva.codice='100189'
    AND registroiva.nreg=registrazionicoge.nreg
    GROUP BY
    registrazionicoge.segno,
    registrazionicoge.ndoc
    ORDER BY
    registrazionicoge.ndoc 
    )
    GROUP BY  DOC
    ORDER BY DOC

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2011
    Messaggi
    11
    GRANDE !!!!
    funziona

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.