Query sql per divisione in mesi

sabato 22 marzo 2008 - 17.40

EmaGuzzetti Profilo | Junior Member

salve a tutti.. io studio in unistituto tecnico per ragionieri programmatori... a scuola stiamo facendo sql e nella verifica la nostra prof ci ha messo una query da fare su questo archivio (ho eliminato i dati superflui):
fatture (codf, data, totf)
scrivere una query che salvi in una tabella il totale fatturato diviso in mesi..
abbiamo chiesto spiegazioni e ha detto che dovevamo ottenere uan tabella dove nella prima colonna c'era l'identificativo del mese e nella seconda il totale delle fatture di quel mese calcolate dal dbms..
alla fine ci ha detto che erano 13 query nidificate.. ma secondo voi è possibile? e se si come?

sara_80 Profilo | Newbie

Ciao,
non mi è molto chiaro cosa volesse dire la tua professoressa ma da quel che ho capito direi che con la seguente query potresti già ottenere il risultato richiesto:

SELECT Month(Data_Fattura) AS Mese, Sum(Totale) AS TotaleFattura
FROM Tabella_Fatture
GROUP BY Month(Data_Fattura)

Ciao Sara

EmaGuzzetti Profilo | Junior Member

in teoria avremmo dovuto farla senza month().. perchè non ce l'ha insegnato. è possibile?

sara_80 Profilo | Newbie

ciao,
potresti dirmi che istruzioni vi ha insegnato?
giusto per darti una risposta più precisa.
probabilmente la tua prof pensava ad una decodifica delle date per identificare il mese della fattura per poi sommare il totale.

fammi sapere
ciao ciao

EmaGuzzetti Profilo | Junior Member

allora ci ha insegnato le funzioni di raggruppamento (sum, avg, max...), il distinct, le query nidificate, l'having e basta credo.. ma quando gli abbiamo chiesto s si doveva scomporre la data ha detto di no..e ha dett oche erano 13 qyery nidificate.. molt ostrano..

sara_80 Profilo | Newbie

più che molto strano un po' esagerato.
la funzione "format" vi è stata insegnata?

ho pensato a come fare queste 13 query nidificate ma proprio non mi viene in mente niente se non che 12 di quelle query possano servire per raggruppare i mesi ed una per fare il totale. ma sinceramente la vedo una operazione un po' assurda ed inutile.

EmaGuzzetti Profilo | Junior Member

format=? no non la conoscimo

sara_80 Profilo | Newbie

Sinceramente ci ho pensato molto ma non riesco a capire cosa vuole la tua prof. mi dispiace non esserti molto d'aiuto.
ma tu hai abbozzato ad una query o nulla?
mi raccomando appena vi svelerà l'arcano fammi sapere perchè sono molto curiosa.
se nel frattempo mi viene in mente qualcosa ti scrivo..

ciao Sara

alx_81 Profilo | Guru

Scusate se mi intrometto..

>Sinceramente ci ho pensato molto ma non riesco a capire cosa
>vuole la tua prof. mi dispiace non esserti molto d'aiuto.
Siamo in 2

Prima di tutto, vorrei capire, che DBMS utilizzi? SQL Server? Postgre? MySQL? Access?
questo può aiutarci a capire di quali funzionalità possiamo disporre.
Poi, dovresti sottoporci la situazione reale, per capire se si tratta di un esercizio sulle subquery o altro.
E ancora, postaci una bella CREATE della tabella con qualche insert e il resultset che vuoi ottenere.
Infine, tu vuoi vedere anche i mesi in cui di fatture (eventualmente) non ce ne sono?

A prescindere da questo, fate attenzione ad utilizzare la prima query proposta da sara_80.
E' corretta in parte, nel senso che se nella tabella delle fatture ci sono più ANNI, non ne tiene conto, sbagliando il conteggio e/o le somme finali.

Ciao!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

EmaGuzzetti Profilo | Junior Member

allora.. visto che è squola noi facciamo sql in generale..(o almeno è quello che dice lei.. perche poi usaimo access).. cmq per salvare basta fare select... into nometbabella e c'ero arrivato..
ma lei voleva ottenere una tabella con 2 attributi, nomemese (non so se numerico o come nome del mese) e totale (in valore)

alx_81 Profilo | Guru

>allora.. visto che è squola noi facciamo sql in generale..(o
>almeno è quello che dice lei.. perche poi usaimo access).. cmq
>per salvare basta fare select... into nometbabella e c'ero arrivato..
>ma lei voleva ottenere una tabella con 2 attributi, nomemese
>(non so se numerico o come nome del mese) e totale (in valore)
Con i dati che abbiamo non si può fare molto allora.
La INTO funziona solo una volta, perchè crea la tabella. Ma se riesegui la query otterrai un errore di "oggetto esistente".
Di conseguenza, forse è meglio prima creare la tabella, cancellare i record preventivamente e solo alla fine eseguire una insert per portare i nuovi record nella tabella stessa.
Poi non mi hai risposto all'altra domanda, molto importante:
vuoi vedere anche i mesi in cui di fatture (eventualmente) non ce ne sono? Ad esempio:

gennaio 10
febbraio 20
marzo 0
aprile 30
...

oppure

gennaio 10
febbraio 20
aprile 30

Per quello nel post precedente ti è stato chiesto che output ti serve.
Quando avremo, se possibile, ulteriori delucidazioni, proveremo a darti aiuto il più possibile.
Ciao!
Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

EmaGuzzetti Profilo | Junior Member

si anche quelli che non hanno fatture.. ma non mi interessa visualizare quante fatture ci sono ma il totale fattura

alx_81 Profilo | Guru

>si anche quelli che non hanno fatture.. ma non mi interessa visualizare
>quante fatture ci sono ma il totale fattura
Ok, quello era un esempio..

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Eccoti una prova fatta in sql server. C'è una soluzione con una subquery (e la month, che è una funzione standard sql ansi 92, credo che tu possa usarla in fondo ) ed una soluzione con una semplice union.
Altre sinceramente non me ne vengono proprio. La seconda non utilizza la month.
ciao!

Alx81 =)

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5