Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214

    [PL/SQL] query con calcoli algebrici

    Ho una tabella fatta cosi:

    ID ARTICOLO SIGN QUANTITA'
    1 art1 + 30
    2 art1 - 40
    3 art1 + 20

    dove il sign è il segno algebrico della quantità indicata nel campo QUANTITA'. Devo fare un'unica query (quindi no store procedures) che, per ogni articolo, (in questo caso c'è un solo articolo), mi tiri fuori la somma con segno +, la somma di quelle con segno - e la differenza tra le 2 quantità. Nell'esempio indicato, dovrei ottenere:

    ARTICOLO QUANTITA_CON_SEGNO_+ QUANTITA_CON_SEGNO_- DIFFERENZA
    art1 50 40 10

    Come posso realizzare una query cosi?

  2. #2
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    mmm a me pare che con una semplice query non ci riesci a meno che non memorizzi il numero col meno.

    Tieni conto che la somma la fai con una select con la SUM, ma la sum non la puoi condizionare, prende tutto e basta.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    mi è stato suggerito di utilizzare la funzione to_number() per creare un valore algebrico. Come dovrei usare questa funzione?

  4. #4
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Puoi fare così
    SELECT(
    (SELECT SUM(quantita)
    from tabella t2
    where segno = '+'
    and t1.id = t2.id
    ) -
    (SELECT SUM(quantita)
    from tabella t3
    where segno = '-'
    and t1.id = t3.id
    )
    )
    from tabella t1
    group by t1.id

  5. #5
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Allora stai operando con Oracle? Scrivi la prox volta PL/SQL.

    Vedi qui anche se non so se funziona, dovresti mettere il formato all'interno dello stesso campo secondo me invece tu hai due campi separati

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    hai ragione, avrei dovuto scrivere che uso pl/sql. Ad ogni modo sono riuscito a calcolare la differenza utilizzando la funzione to_number() realizzando una query del tipo:

    select sum(to_number(tabella.segno||tabella.quantita))
    from tabella

    ora avrei bisogno di ottenere i parziali. Partendo dall'esempio di prima, sono riuscito ad ottenere 10, ma ora ho bisogno anche di visualizzare 50 e 40

  7. #7
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    Ok,
    per i parziali ti ripropongo la query che ti ho scritto prima, leggermente modificata:

    SELECT t1.id,
    NVL(
    (SELECT SUM(quantita)
    from tabella t2
    where segno = '+'
    and t1.id = t2.id
    ), 0) AS positivo,
    NVL(
    (SELECT SUM(quantita)
    from tabella t3
    where segno = '-'
    and t1.id = t3.id
    ),0) AS negativo
    )
    from tabella t1
    group by t1.id

  8. #8
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    954
    oppure se vuoi adoperare la stessa query che hai scritto tu, potresti fare così (se funziona):

    select sum(to_number(tabella.segno||tabella.quantita)),
    sum(case when segno = '+' then 0 else quantita) as positivo,
    sum(case when segno = '-' then 0 else quantita) as negativo
    from tabella

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    ho provato la tua query ma mi viene segnalato un errore di missing keyword localizzato prima di "as negativo". C'è qualche errore di sintassi che non ho visto?

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2004
    Messaggi
    214
    Ho risolto utilizzando la funzione decode(). Grazie per il supporto comunque

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