Newsgroup: it.comp.software.database
Titolo: tabella pivot con totali riga

ciao
su MySql ho una tabella con i campi seguenti:
Progetto, DatScadRend, ImportoRend 
esempio:
02 - 2003-06-10 - 500
02 - 2003-06-10- 1000
02 - 2003-06-10- 500
02 - 2003-07-31- 1500
03 - 2003-06-10- 2500
03 - 2003-07-31- 500
03 - 2003-07-31- 1500
03 - 2003-07-31- 2500
04 - 2003-06-10- 2500
04 - 2003-07-31- 500
ho circa 5.000 record, i progetti sono circa 90, le date sono una 
decina
con la seguente istruzione:
Select progetto,
SUM(case when DatScadRend='2003-06-10' then ImportoRend Else null END)
as '2003-06-10',
SUM(case when DatScadRend='2003-07-31' then ImportoRend Else null END)
as '2003-07-31',
SUM(case when DatScadRend='2003-10-31' then ImportoRend Else null END)
as '2003-10-31',
SUM(case when DatScadRend='2003-11-24' then ImportoRend Else null END)
as '2003-11-24',
SUM(case when DatScadRend='2004-01-31' then ImportoRend Else null END)
as '2004-01-31',
SUM(ImportoRend) as Totale
from rendicontazione 
group by progetto
ho ottenuto:
Progetto, 2003-06-10, 2003-07-31, Totale
02	  2000	    	1500   3500
03        2500      	2000   4500
04        2500      	500    3000
cioè ho realizzato la tabella pivot con i totali di riga;
ORA vorrei visualizzare anche i totali di colonna per data cioè:
Progetto, 2003-06-10, 2003-07-31, totale
02	  2000	    	1500    3500
03        2500      	2000    4500
04        2500      	500     3000
TOT	  5000		4000    9000
ma non riesco ha trovare l'sql che me lo faccia;
mi aiutate?
ciao
Ale


I dettagli li trovi qui:
http://www.onlamp.com/pub/a/onlamp/2003/12/04/crosstabs.html
Se non vuoi leggere tutto l'articolo, il trucco e' usare una UNION
con una seconda query simile alla prima, eccetto che non ha GROUP BY:
Select progetto,
SUM(case when DatScadRend='2003-06-10' then ImportoRend Else null END)
as '2003-06-10',
SUM(case when DatScadRend='2003-07-31' then ImportoRend Else null END)
as '2003-07-31',
SUM(case when DatScadRend='2003-10-31' then ImportoRend Else null END)
as '2003-10-31',
SUM(case when DatScadRend='2003-11-24' then ImportoRend Else null END)
as '2003-11-24',
SUM(case when DatScadRend='2004-01-31' then ImportoRend Else null END)
as '2004-01-31',
SUM(ImportoRend) as Totale
from rendicontazione
group by progetto
UNION
Select "999999",  -- al solo scopo di farne l'ultima riga
SUM(case when DatScadRend='2003-06-10' then ImportoRend Else null END)
as '2003-06-10',
SUM(case when DatScadRend='2003-07-31' then ImportoRend Else null END)
as '2003-07-31',
SUM(case when DatScadRend='2003-10-31' then ImportoRend Else null END)
as '2003-10-31',
SUM(case when DatScadRend='2003-11-24' then ImportoRend Else null END)
as '2003-11-24',
SUM(case when DatScadRend='2004-01-31' then ImportoRend Else null END)
as '2004-01-31',
SUM(ImportoRend) as Totale
from rendicontazione
Questa query e' abbastanza pesante. Spesso e' piu' conveniente fare due
query separate e unificarle nell'applicazione.
(E se devi macinare milioni di record, forse e' piu' conveniente
fare le somme nell'applicazione. Tutto da valutare).
Ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

grazie davvero per la chiarezza dell'articolo e per la disponibilità
ciao
Ale