Problema con query in access

lunedì 18 giugno 2007 - 15.22

zseven Profilo | Senior Member

Ciao ragazzi,
non riesco a risolvere una query che non dovrebbe essere molto complicata.

Ho un database così composto:
id_cliente - testo
totale - numero
inverno - si-no
estate - si-no
anno - testo

In pratica devo far visualizzare il totale per ogni cliente dell'inverno e dell'estate per il 2007.

Le due query sono queste, ma se provo a fare una union non ottengo il risultato sperato.


SELECT tab_ordine.id_cliente, Sum(tab_ordine.totale) AS totale_inverno,tab_ordine.anno FROM tab_ordine WHERE tab_ordine.inverno = true AND tab_ordine.anno = '2007' GROUP BY tab_ordine.id_cliente, tab_ordine.anno SELECT tab_ordine.id_cliente, Sum(tab_ordine.totale) AS totale_estate, tab_ordine.anno FROM tab_ordine WHERE tab_ordine.estate = true AND tab_ordine.anno = '2007' GROUP BY tab_ordine.id_cliente, tab_ordine.anno

Sapete darmi una mano?
Grazie

lbenaglia Profilo | Guru

>Sapete darmi una mano?

Ciao zseven,

Potresti postare il risultato che ti aspetti?

>Grazie
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

zseven Profilo | Senior Member

Ciao Lorenzo,
puoi visualizzare a questo indirizzo come intendo visualizzare i risultati.
http://www.assoluto.it/prova.asp

Grazie mille.
Ciao

lbenaglia Profilo | Guru

>puoi visualizzare a questo indirizzo come intendo visualizzare
>i risultati.
>http://www.assoluto.it/prova.asp

OK, ti posto un esempio completo in T-SQL per SQL Server che potrai adattare in Jet-SQL:

USE tempdb; CREATE TABLE dbo.tab_ordine( id_cliente varchar(10) NOT NULL, totale int NOT NULL, inverno bit NOT NULL, estate bit NOT NULL, anno smallint ); INSERT dbo.tab_ordine VALUES('cliente 1', 100, 0, 1, 2007); INSERT dbo.tab_ordine VALUES('cliente 1', 200, 0, 1, 2006); INSERT dbo.tab_ordine VALUES('cliente 1', 300, 0, 1, 2007); INSERT dbo.tab_ordine VALUES('cliente 1', 400, 0, 1, 2007); INSERT dbo.tab_ordine VALUES('cliente 1', 500, 1, 0, 2007); INSERT dbo.tab_ordine VALUES('cliente 2', 600, 0, 1, 2007); INSERT dbo.tab_ordine VALUES('cliente 2', 700, 0, 1, 2005); INSERT dbo.tab_ordine VALUES('cliente 2', 800, 1, 0, 2007); INSERT dbo.tab_ordine VALUES('cliente 3', 900, 1, 0, 2007); SELECT id_cliente , SUM(inverno) AS totale_inverno , SUM(estate) AS totale_estate , anno FROM( SELECT id_cliente , totale AS inverno , 0 AS estate , anno FROM tab_ordine WHERE inverno = 1 AND anno = 2007 UNION ALL SELECT id_cliente , 0 , totale , anno FROM tab_ordine WHERE estate = 1 AND anno = 2007 ) AS Q GROUP BY id_cliente, anno; /* Output: id_cliente totale_inverno totale_estate anno ---------- -------------- ------------- ------ cliente 1 500 800 2007 cliente 2 800 600 2007 cliente 3 900 0 2007 (3 row(s) affected) */ DROP TABLE dbo.tab_ordine;

>Grazie mille.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

zseven Profilo | Senior Member

Giusto!
il mio errore se ho capito bene era di non considerare il campo uguale a zero.

Posso chiederti se cambia qualcosa tra UNION e UNION ALL?

Riporto il codice come l'ho riscritto per access, magari può servire a qualcuno.
Grazie mille.
Ciao

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

lbenaglia Profilo | Guru

>Posso chiederti se cambia qualcosa tra UNION e UNION ALL?
Di default l'operatore UNION rimuove le righe duplicate dal result set. Se utilizzi ALL, tutte le righe saranno incluse nel result set e i duplicati non saranno eliminati.

By default, the UNION operator removes duplicate rows from the result set. If you use ALL, all rows are included in the results and duplicates are not removed

>Grazie mille.
Prego.

Ciao!
--
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo/
http://italy.mvps.org

zseven Profilo | Senior Member

Ciao Lorenzo,
è sorto un nuovo problema.
Ai risultati appena ottenuti avrei la necessità di mostrare altre due colonne sempre per le due stagioni, però relative all'anno 2008.
Ho provato a fare una union con quanto ti scrivo di seguito, ma i risultati invece che comparire in due colonne nuove vengono visualizzati di seguito a quelli ottenuti precedentemente.

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

Spero di essere stato chiaro nella spiegazione.
Riesci ad aiutarmi anche questa volta?

Grazie

zseven Profilo | Senior Member

Ciao Ragazzi,
nessuno riesce ad aiutarmi per quest'altro piccolo passo?

Grazie
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