Newsgroup: it.comp.software.database
Titolo: tabelle pivot con mysql

su MySql ho una tabella con i campi seguenti:
Progetto,Data,Importo
esempio:
02 - 1/1/2004 - 500
02 - 1/1/2004 - 1000
02 - 1/1/2004 - 500
02 - 1/2/2004 - 1500
03 - 1/1/2004 - 2500
03 - 1/2/2004 - 500
03 - 1/2/2004 - 1500
03 - 1/2/2004 - 2500
04 - 1/1/2004 - 2500
04 - 1/2/2004 - 500
ho circa 5.000 record, i progetti sono circa 90, le date sono una 
decina
vorrei avere una tabella pivot (con Access facilmente realizzabile) 
dove ogni riga è un progetto diverso, le date come intestazioni di 
colonna e per valori la somma degli importi, cioè una cosa del tipo:
Progetto, 1/1/2004, 1/2/2004, ...
02	  2000	    1500
03        2500      2000
04        2500      500
Ho letto che MySql non realizza tabelle Pivot, io ho pensato a fare 
una matrice (array bidimensionale) e poi a darlo in pasto ad un ciclo 
per la creazione della tabella in HTML, ma mi sembra un pò complicato, 
per cui prima di andare avanti vorrei conoscere la vostra opinione
ciao
Ale


Si puo' fare.
SELECT
     progetto,
     SUM( CASE WHEN Data = '1/1/2004' THEN Importo ELSE NULL END) as '1/1/2004',
     SUM( CASE WHEN Data = '1/2/2004' THEN Importo ELSE NULL END) as '1/2/2004',
     ....
     SUM(Importo) as totale
FROM
    tabella_progetti
GROUP BY
    progetto
La query va costruita con l'aiuto di un linguaggio
di programamzione.
Vedi questo articolo che spiega la teoria della costruzione delle query
e la realizzazione in Perl di un modulo per creare tabelle pivot multi-dimensionali.
http://www.onlamp.com/pub/a/onlamp/2003/12/04/crosstabs.html
ciao
gmax
-- 
   ____ ____  _____ _   _
  / _  |    \(____ ( \ / )
( (_| | | | / ___ |) X (
  \___ |_|_|_\_____(_/ \_)
(_____|
MySQL Certified Professional
Sapere, saper fare, fare, far sapere
http://gmax.oltrelinux.com

 Ho letto che MySql non realizza tabelle Pivot,
Forse non si chiamano pivot, ma con il bravo sql puoi estrarre praticamente 
tutto quello che vuoi.
L'esempio che posto riporta in una tabella i totali annuali e mensili dei 
fatturati dal 1998 in poi.
Probabilmente realizzare la tua tabella č molto piů facile con mysql che con 
access.
Ciao, Angelo.
---------------
select 
year(ft_data) as 'anno',
sum(if(month(ft_data)= 1,(ft_pz-ft_sc)*ft_qta,0)) as 'gen',
sum(if(month(ft_data)= 2,(ft_pz-ft_sc)*ft_qta,0)) as 'feb',
sum(if(month(ft_data)= 3,(ft_pz-ft_sc)*ft_qta,0)) as 'mar',
sum(if(month(ft_data)= 4,(ft_pz-ft_sc)*ft_qta,0)) as 'apr',
sum(if(month(ft_data)= 5,(ft_pz-ft_sc)*ft_qta,0)) as 'mag',
sum(if(month(ft_data)= 6,(ft_pz-ft_sc)*ft_qta,0)) as 'giu',
sum(if(month(ft_data)= 7,(ft_pz-ft_sc)*ft_qta,0)) as 'lug',
sum(if(month(ft_data)= 8,(ft_pz-ft_sc)*ft_qta,0)) as 'ago',
sum(if(month(ft_data)= 9,(ft_pz-ft_sc)*ft_qta,0)) as 'set',
sum(if(month(ft_data)=10,(ft_pz-ft_sc)*ft_qta,0)) as 'ott',
sum(if(month(ft_data)=11,(ft_pz-ft_sc)*ft_qta,0)) as 'nov',
sum(if(month(ft_data)=12,(ft_pz-ft_sc)*ft_qta,0)) as 'dic',
sum((ft_pz-ft_sc)*ft_qta) as 'tot'
from dp_fatturex inner join dp_fatture 
on dp_fatturex.id_fatt = dp_fatture.id_fatt
where year(ft_data)>1998
group by year(ft_data)
---------------
-- 
        Powered by Debian Woody
 [Linux Registered User # 341564]
 L'Iraq era una casa dove i genitori affamavano e stupravano i figli.
 Poi sono arrivati i poliziotti con gli assistenti sociali che hanno 
derubato e distrutto la casa.
 Quindi hanno ucciso i genitori e continuato a stuprare i figli.