Ah, ok.
La query allora diventerebbe così:
codice:
select agente,
sum(gennaio) as gennaio,
sum(febbraio) as febbraio,
sum(marzo) as marzo,
sum(aprile) as aprile,
sum(maggio) as maggio,
sum(giugno) as giugno,
sum(luglio) as luglio,
sum(agosto) as agosto,
sum(settembre) as settembre,
sum(ottobre) as ottobre,
sum(novembre) as novembre,
sum(dicembre) as dicembre,
sum(totale) as totale
from (
select agente,
sum(if(month(data_inizio)=1,prezzo_agenti,0)) as gennaio,
sum(if(month(data_inizio)=2,prezzo_agenti,0)) as febbraio,
sum(if(month(data_inizio)=3,prezzo_agenti,0)) as marzo,
sum(if(month(data_inizio)=4,prezzo_agenti,0)) as aprile,
sum(if(month(data_inizio)=5,prezzo_agenti,0)) as maggio,
sum(if(month(data_inizio)=6,prezzo_agenti,0)) as giugno,
sum(if(month(data_inizio)=7,prezzo_agenti,0)) as luglio,
sum(if(month(data_inizio)=8,prezzo_agenti,0)) as agosto,
sum(if(month(data_inizio)=9,prezzo_agenti,0)) as settembre,
sum(if(month(data_inizio)=10,prezzo_agenti,0)) as ottobre,
sum(if(month(data_inizio)=11,prezzo_agenti,0)) as novembre,
sum(if(month(data_inizio)=12,prezzo_agenti,0)) as dicembre,
sum(prezzo_agenti) as totale
from adempimenti as ade
left join attivita as att
on ade.idadempimento = att.idadempimento
where data_inizio between '2010-01-01' and '2010-12-31' and agente <> 2
group by ade.agente
union all
select 2 as agente,
sum(if(month(data_inizio)=1,prezzo_agente_2,0)),
sum(if(month(data_inizio)=2,prezzo_agente_2,0)),
sum(if(month(data_inizio)=3,prezzo_agente_2,0)),
sum(if(month(data_inizio)=4,prezzo_agente_2,0)),
sum(if(month(data_inizio)=5,prezzo_agente_2,0)),
sum(if(month(data_inizio)=6,prezzo_agente_2,0)),
sum(if(month(data_inizio)=7,prezzo_agente_2,0)),
sum(if(month(data_inizio)=8,prezzo_agente_2,0)),
sum(if(month(data_inizio)=9,prezzo_agente_2,0)),
sum(if(month(data_inizio)=10,prezzo_agente_2,0)),
sum(if(month(data_inizio)=11,prezzo_agente_2,0)),
sum(if(month(data_inizio)=12,prezzo_agente_2,0)),
sum(prezzo_agente_2)
from adempimenti as ade
left join attivita as att
on ade.idadempimento = att.idadempimento
where data_inizio between '2010-01-01' and '2010-12-31') as t
group by t.agente
with rollup
Per trasformarla in una vista ne devi creare due a causa delle limitazioni nell'uso delle subquery nella clausola from. Quindi prima si crea una vista senza la riga di riepilogo:
codice:
create view agenti as
select agente,
sum(if(month(data_inizio)=1,prezzo_agenti,0)) as gennaio,
sum(if(month(data_inizio)=2,prezzo_agenti,0)) as febbraio,
sum(if(month(data_inizio)=3,prezzo_agenti,0)) as marzo,
sum(if(month(data_inizio)=4,prezzo_agenti,0)) as aprile,
sum(if(month(data_inizio)=5,prezzo_agenti,0)) as maggio,
sum(if(month(data_inizio)=6,prezzo_agenti,0)) as giugno,
sum(if(month(data_inizio)=7,prezzo_agenti,0)) as luglio,
sum(if(month(data_inizio)=8,prezzo_agenti,0)) as agosto,
sum(if(month(data_inizio)=9,prezzo_agenti,0)) as settembre,
sum(if(month(data_inizio)=10,prezzo_agenti,0)) as ottobre,
sum(if(month(data_inizio)=11,prezzo_agenti,0)) as novembre,
sum(if(month(data_inizio)=12,prezzo_agenti,0)) as dicembre,
sum(prezzo_agenti) as totale
from adempimenti as ade
left join attivita as att
on ade.idadempimento = att.idadempimento
where data_inizio between '2010-01-01' and '2010-12-31' and agente <> 2
group by ade.agente
union all
select 2 as agente,
sum(if(month(data_inizio)=1,prezzo_agente_2,0)),
sum(if(month(data_inizio)=2,prezzo_agente_2,0)),
sum(if(month(data_inizio)=3,prezzo_agente_2,0)),
sum(if(month(data_inizio)=4,prezzo_agente_2,0)),
sum(if(month(data_inizio)=5,prezzo_agente_2,0)),
sum(if(month(data_inizio)=6,prezzo_agente_2,0)),
sum(if(month(data_inizio)=7,prezzo_agente_2,0)),
sum(if(month(data_inizio)=8,prezzo_agente_2,0)),
sum(if(month(data_inizio)=9,prezzo_agente_2,0)),
sum(if(month(data_inizio)=10,prezzo_agente_2,0)),
sum(if(month(data_inizio)=11,prezzo_agente_2,0)),
sum(if(month(data_inizio)=12,prezzo_agente_2,0)),
sum(prezzo_agente_2)
from adempimenti as ade
left join attivita as att
on ade.idadempimento = att.idadempimento
where data_inizio between '2010-01-01' and '2010-12-31'
e poi su di essa si crea la vista definita:
codice:
create view agenti_con_totale as
select agente,
sum(gennaio) as gennaio,
sum(febbraio) as febbraio,
sum(marzo) as marzo,
sum(aprile) as aprile,
sum(maggio) as maggio,
sum(giugno) as giugno,
sum(luglio) as luglio,
sum(agosto) as agosto,
sum(settembre) as settembre,
sum(ottobre) as ottobre,
sum(novembre) as novembre,
sum(dicembre) as dicembre,
sum(totale) as totale
from agenti
group by agente
with rollup
select * from agenti_con_totale;
Mi rimane comunque la curiosità del perchè non gli aggradi il coalesce.