Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282

    SQL: istruzione per confrontare due periodi sullo stesso archivio

    Ciao a tutti,
    devo estrarre da un archivio una serie di record raggruppati per tipologia ed in un certo periodo. e questo riesco a farlo in questo modo:

    select scadenze.SC_AZI,scadenze.SC_CAU,SUM(scadenze.SC_IM P) as emesso,SUM(scadenze.SC_IMC) as incassato,SUM(scadenze.SC_IMP - scadenze.SC_IMC) as differenza from (scadenze Left outer Join causcont on causcont.CU_KEY=scadenze.SC_CAU) where (scadenze.SC_DAT between w_d1 and w_d2) group by scadenze.SC_AZI

    Vorrei sapere se è possibile costruire una istruzione che mi confronti le stesse cose in due periodi diversi (diciamo w_d3 e w_d4).

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    ho trascritto male la select...
    l'ultima riga è:

    group by scadenze.SC_CAU

    per essere più chiara ho due tabelle:
    SCADENZE(codAzienda, datascadenza, causale, importodovuto, importoincassato) e
    CAUSALI(codice, descrizione)

    passando due intervalli di date (d1,d2 e d3,d4) vorrei riepilogare gli importi per causali nei rispettivi periodi.

    Grazie

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    non c'è nessuno in grado di darmi qualche consiglio?

    la mia soluzione è quella di fare una query per il primo periodo, una seconda query per il secondo periodo e poi unire il tutto, ma non mi sembra una grande cosa...

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non è che sia proprio chiarissimo (almeno a me) nè quale sia lo schema nè cosa vuoi fare effettivamente, ti ricordo che quello che per te è semplice (SC_CAU etc) a me non dice nulla.
    ---
    Dumpa un pezzetto del db (delle due tabelle), e magari ne riparliamo

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    innanzitutto grazie per il tuo intervento, hai ragione forse non sono espressa bene...

    il problema è questo:
    ho una tabella con i seguenti campi:

    azienda,
    datascadenza,
    causale,
    importo,
    importoincassato

    con una

    select scadenze.azienda, scadenze.causale, SUM(scadenze.importo), SUM(scadenze.importoincassato), SUM(scadenze.importo - scadenze.importoincassato)
    from scadenze
    where (scadenze.datascadenza between w_d1 and w_d2)
    group by scadenze.causale

    totalizzo i campi importo e importoincassato raggruppandoli per causali e filtrando i record sulla data di scadenza.

    ora io vorrei fare la stessa cosa ma su due periodi distinti (es: gennaio e febbraio) in modo da poter visualizzare per causale i risultati ottenuti.

    sono stata un pò più chiara?

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    121
    Chiara sei stata più chiara.
    Insomma... da quello che ho capito, ti serve una union select?

    Una cosa del tipo

    codice:
    select scadenze.azienda, scadenze.causale, SUM(scadenze.importo), SUM(scadenze.importoincassato), SUM(scadenze.importo - scadenze.importoincassato)
    from scadenze 
    where (scadenze.datascadenza between w_d1 and w_d2) 
    group by scadenze.causale 
    
    UNION 
    
    select scadenze.azienda, scadenze.causale, SUM(scadenze.importo), SUM(scadenze.importoincassato), SUM(scadenze.importo - scadenze.importoincassato)
    from scadenze 
    where (scadenze.datascadenza between w_d3 and w_d4) 
    group by scadenze.causale
    Così facendo, avresti i risultati sia del primo periodo che del secondo... se ho ben capito cosa cerchi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    non ti basta un "or" nella condizione?

    ((data>=inizio1) and (data<=fine1))
    or
    ((data>=inizio2) and (data<=fine2))

    oppure

    (...between...)
    or
    (...between...)

    direi che qualcosa mi sfugge

  8. #8
    Utente di HTML.it L'avatar di comas17
    Registrato dal
    Apr 2002
    Messaggi
    6,522
    Originariamente inviato da franzauker

    direi che qualcosa mi sfugge
    Nell'esempio che porti tu faresti un'unica somma mentre, da quel che ho capito io, vuole confrontare le somme in due periodi diversi (come fa lo script di atsap)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2005
    Messaggi
    282
    vi ringrazio per i vostri suggerimenti.

    la UNION funziona solo che mi riporta i dati ripetendo la causale una riga per ciascun periodo
    a me invece interessava ottenere un'unica riga per causale con colonne per ciascun periodo. in questo modo mi è più semplice calcolare % ecc....

    nel frattempo ho provato in un'altro modo:
    ho salvato una query sulle scadenze nel primo periodo
    faccio una query sulle scadenze nel secondo periodo con join al risultato della prima query

    sembra che funziona....

    se può servire a qualcuno posso postare il codice.

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    121
    Beh certo, tu comunque postalo! Potrebbe sempre tornare utile.
    Comunque il tuo approccio è corretto, visto che comunque logicamente è impossibile dire al database di restituire i risultati che restituirebbe una UNION con meno colonne: è logico... perché se ho bisogno di confrontare gli stessi dati, una cosa è come li immagini tu, un'altra cosa è come li elabora il motore del database. Stesso discorso per una subquery... avresti potuto effettuare una "select nella select", però con molta probabilità avresti ottenuto più righe nella subquery (altro discorso formalmente impossibile). L'unica, in questi casi, è fare come hai pensato tu, ovvero "bufferizzare" il risultato della prima query e joinarla con le condizioni preferite. Oppure usi una stored...

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.