[Risolto] Query per ogni anno
[Risolto] Query per ogni anno
Ciao a tutti, ahimè mi sono bloccato e nuovamente son qui a chiedervi una dritta.
Sto provando a fare una query senza riuscirci che per ogni anno mi sommi degli importi di modo da ottenere questo risultato:
2018 2019
Gianluca € 1000 Gianluca € 1500
Marco € 700 Marco € 250
Mario € 100 Mario € 200
Francesca € 0 Francesca € 500
tutto questo non solo per confrontare i risultati per ogni anno ma anche perché mi servirebbe verificare la percentuale di variazione da un anno all'altro.
Grazie a chi mi aiuterà
Allego esempio
Sto provando a fare una query senza riuscirci che per ogni anno mi sommi degli importi di modo da ottenere questo risultato:
2018 2019
Gianluca € 1000 Gianluca € 1500
Marco € 700 Marco € 250
Mario € 100 Mario € 200
Francesca € 0 Francesca € 500
tutto questo non solo per confrontare i risultati per ogni anno ma anche perché mi servirebbe verificare la percentuale di variazione da un anno all'altro.
Grazie a chi mi aiuterà
Allego esempio
- Allegati
-
- prova1.odb
- (4.63 KiB) Scaricato 141 volte
Ultima modifica di marce84 il mercoledì 24 luglio 2019, 19:59, modificato 1 volta in totale.
Libreoffice 5.1.6.2 su Ubuntu 16.04.6
Re: Query per ogni anno
Ciao, al volo:
ma forse si può fare meglio (con un po' di tempo a disposizione).
Codice: Seleziona tutto
SELECT "nome", YEAR( "data" ) AS "Anno", SUM( "importo" ) AS "Importo" FROM "Tabella1" GROUP BY "nome", YEAR( "data" ) ORDER BY "nome" ASC
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
Così dovrebbe essere meglio:
Codice: Seleziona tutto
SELECT "nome", SUM(CASEWHEN(YEAR("data") = 2018, ("importo"), NULL)) AS "2018", SUM(CASEWHEN(YEAR("data") = 2019, ("importo"), NULL)) AS "2019" FROM "Tabella1" GROUP BY "nome" ORDER BY "nome" DESC
- Allegati
-
- Schermata 2019-07-19 alle 07.59.55.png (11.05 KiB) Visto 3788 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
Charlie complimenti la tua soluzione è ottima, ho modificato leggermente il codice inserendo la funzione Year (Now()) di modo che la sommatoria si aggiorni automaticamente sull'anno in corso, invece sulle operazioni matematiche ho qualche perplessità, somme e differenze sono corrette, ho provato invece a fare un rapporto per il calcolo delle percentuali ed il risultato è errato, riesci a dirmi cosa sto sbagliando?
Allego l'esempio ritoccato.
Allego l'esempio ritoccato.
- Allegati
-
- prova1.odb
- (4.94 KiB) Scaricato 144 volte
Libreoffice 5.1.6.2 su Ubuntu 16.04.6
Re: Query per ogni anno
Credo che il problema sia dovuto alla divisione fra numeri interi (i record dei campi 2019 e 2018 lo sono).
Per ovviare e per non fare troppe operazioni nella stessa query, salva Ricerca2 come Vista2 e fai una nuova query su Vista2 trasformando con la funzione CAST gli interi in decimali:
Vedi Ricerca3 nel file allegato.
Per ovviare e per non fare troppe operazioni nella stessa query, salva Ricerca2 come Vista2 e fai una nuova query su Vista2 trasformando con la funzione CAST gli interi in decimali:
Codice: Seleziona tutto
SELECT "nome", "2019", "2018", "differenze", ( CAST( "differenze" AS DECIMAL ( 8 , 2 ) ) ) / ( CAST( "2018" AS DECIMAL ( 8 , 2 ) ) ) * 100 AS "%" FROM "Vista2"
- Allegati
-
- prova2.odb
- (6.21 KiB) Scaricato 144 volte
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
ok Charlie,
adesso mi è tutto più chiaro ho testato sul mio database e funziona bene, ti ringrazio per la tua competenza.
Ora mi sto spingendo oltre nel senso che sto provando a fare i confronti non solo tra 2 anni diversi ma tra due mesi di 2 anni diversi( es. gennaio 2018 con gennaio 2019)
ho visto da alcuni vostri lavori che usate la funzione to_char, ho provato a replicare abbinandola alla tua soluzione ma ci sono riuscito parzialmente
Ti faccio un esempio pratico sul file che ti ho postato:
SELECT "nome", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/19', ( "importo" ), 0 ) ) AS "gennaio 2019", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/18', ( "importo" ), 0 ) ) AS "gennaio 2018" FROM "Tabella1" GROUP BY "nome" ORDER BY "nome" ASC
ora questo va bene per confrontare gennaio 2018 con gennaio 2019, ma io sto provando ad automatizzare la ricerca inserendo la funzione now() per non mettere mano al codice ogni volta che inizia un nuovo anno, in questo caso quando sostituisco 2019 con year(now()) e 2018 con year(now()) -1 il risultato è zero. Cosa sbaglio???
SELECT "nome", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/year (now())', ( "importo" ), 0 ) ) AS "gennaio 2019", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/year (now())-1', ( "importo" ), 0 ) ) AS "gennaio 2018" FROM "Tabella1" GROUP BY "nome" ORDER BY "nome" ASC
Allego file
adesso mi è tutto più chiaro ho testato sul mio database e funziona bene, ti ringrazio per la tua competenza.
Ora mi sto spingendo oltre nel senso che sto provando a fare i confronti non solo tra 2 anni diversi ma tra due mesi di 2 anni diversi( es. gennaio 2018 con gennaio 2019)
ho visto da alcuni vostri lavori che usate la funzione to_char, ho provato a replicare abbinandola alla tua soluzione ma ci sono riuscito parzialmente
Ti faccio un esempio pratico sul file che ti ho postato:
SELECT "nome", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/19', ( "importo" ), 0 ) ) AS "gennaio 2019", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/18', ( "importo" ), 0 ) ) AS "gennaio 2018" FROM "Tabella1" GROUP BY "nome" ORDER BY "nome" ASC
ora questo va bene per confrontare gennaio 2018 con gennaio 2019, ma io sto provando ad automatizzare la ricerca inserendo la funzione now() per non mettere mano al codice ogni volta che inizia un nuovo anno, in questo caso quando sostituisco 2019 con year(now()) e 2018 con year(now()) -1 il risultato è zero. Cosa sbaglio???
SELECT "nome", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/year (now())', ( "importo" ), 0 ) ) AS "gennaio 2019", SUM( casewhen( to_char( "data", 'MM/YY' ) = '01/year (now())-1', ( "importo" ), 0 ) ) AS "gennaio 2018" FROM "Tabella1" GROUP BY "nome" ORDER BY "nome" ASC
Allego file
- Allegati
-
- prova3.odb
- (6.63 KiB) Scaricato 139 volte
Libreoffice 5.1.6.2 su Ubuntu 16.04.6
Re: Query per ogni anno
Ciao, lavora su quanto segue. Prova ad aprire una query nuova e testa questo codice
avrai come risultato una stringa che rappresenta una data nel formato mm/aa (anno di 2 cifre).
Poi:
avrai come risultato una stringa sempre uguale : "01/year (now())" che non ti serve a niente.
Se le metti a confronto, come hai fatto, con CASEWHEN, il risultato sarà sempre zero.
Al suo posto puoi provare:
che ti darà la stringa che rappresenta la data "01/2019" (l'anno è di 4 cifre).
Ma per confrontarla con CASEWHEN dovrai cambiare anche to_char("data", 'MM/YY') in to_char("data", 'MM/YYYY')
P.S. Le date che stai testando non contengono il mese di gennaio, quindi avrai ancora risultato zero. Per vedere qualcosa devi passare ad un mese diverso.
Codice: Seleziona tutto
SELECT to_char( "data", 'MM/YY' ) FROM "Tabella1"
Poi:
Codice: Seleziona tutto
SELECT '01/year (now())' FROM "Tabella1"
Se le metti a confronto, come hai fatto, con CASEWHEN, il risultato sarà sempre zero.
Al suo posto puoi provare:
Codice: Seleziona tutto
SELECT '01' || '/' || YEAR( NOW( ) ) FROM "Tabella1"
Ma per confrontarla con CASEWHEN dovrai cambiare anche to_char("data", 'MM/YY') in to_char("data", 'MM/YYYY')
P.S. Le date che stai testando non contengono il mese di gennaio, quindi avrai ancora risultato zero. Per vedere qualcosa devi passare ad un mese diverso.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
Ciao Charlie,
ho creato la query ricerca 6:
credevo di averci preso ma in realtà alcune somme sono sballate, solo una è corretta, come mai?
ho creato la query ricerca 6:
Codice: Seleziona tutto
SELECT MONTH( "data" ), SUM( casewhen( to_char( "data", 'MM/YYYY' ) = MONTH( "data" ) || '/' || YEAR( NOW( ) ), ( "importo" ), 0 ) ) AS "2019", SUM( casewhen( to_char( "data", 'MM/YYYY' ) = MONTH( "data" ) || '/' || YEAR( NOW( ) ), ( "importo" ), 0 ) ) AS "2018" FROM "Tabella1" GROUP BY MONTH( "data" ) ORDER BY MONTH( "data" ) ASC
- Allegati
-
- prova3.odb
- (6.97 KiB) Scaricato 139 volte
Libreoffice 5.1.6.2 su Ubuntu 16.04.6
Re: Query per ogni anno
Questi sono i "raffronti" che la tua query fa usando la funzione CASEWHEN, come vedi ci sono delle differenze. Corrisponde solo il mese 11.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
Risolvi con una sola M:
Codice: Seleziona tutto
to_char( "data", 'M/YYYY' )
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
Re: Query per ogni anno
Grazie.
charlie
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org
macOS 14.4.1 Sonoma: Open Office 4.1.15 - LibreOffice 7.5.7.2
http://www.charlieopenoffice.altervista.org