Temat: [MsSQL] grupowanie danych - Pivot
drop table #dostawy
select a.NumerRejestracja, c.DataDodania, d.Koszt
into #dostawy
from PojazdRejestracja a
inner join RejestracjaPojazduDostawczego b on a.ID=b.PojazdRejestracjaID
inner join Faktura c on b.DostawaID=c.DostawaID
inner join FakturaSprzet d on c.ID=d.FakturaID
--select * from #dostawy
--zamiast w CASE wolę miesiące w tabeli tymczasowej
drop table #miesiace
create table #miesiace (nr int, mc varchar(15))
insert into #miesiace select 1, 'Styczeń'
insert into #miesiace select 2, 'Luty'
insert into #miesiace select 3, 'Marzec'
insert into #miesiace select 4, 'Kwiecień'
insert into #miesiace select 5, 'May'
insert into #miesiace select 6, 'Czerwiec'
insert into #miesiace select 7, 'Lipiec'
insert into #miesiace select 8, 'Sierpień'
insert into #miesiace select 9, 'Wrzesień'
insert into #miesiace select 10, 'Październik'
insert into #miesiace select 11, 'Listopad'
insert into #miesiace select 12, 'Grudzień'
--tutaj przygotowuję wsad do tebeli przestawnej
drop table #dane
select a.mc, yy=year(b.DataDodania), b.NumerRejestracja, Koszt=sum(b.Koszt)
into #dane
from #miesiace a
inner join #dostawy b on a.nr=month(b.DataDodania)
group by a.mc, year(b.DataDodania), b.NumerRejestracja
--select * from #dane
declare @cols nvarchar(1000);
declare @sql nvarchar(2000);
--tutaj kolumny :) używam FOR XML ale równie dobrze można przygotować taki ciąg znaków w pętli
select @cols=STUFF((select N'],['+mc from #miesiace order by nr for xml path('')), 1, 2, '') + N']';
--select @cols
set @sql =
N'select * from ( ' +
N'select * from #dane ' +
N') O pivot (sum(Koszt) for mc in (' + @cols + N')) P;';
exec(@sql);
mam nadzieję że pomogłem :)