Ini sebenarnya dapat dilakukan dengan cukup mudah dengan PIVOT
fungsi. Karena jawaban lain tidak menunjukkan kode yang terkait dengan cara melakukannya, berikut adalah dua cara untuk PIVOT
data.
Pertama adalah dengan Pivot Statis . Pivot statis adalah saat Anda mengetahui data sebelumnya untuk diubah menjadi kolom.
select *
from
(
select name, id, convert(char(5), dt, 101) dt, jobid, amount
from test
) x
pivot
(
sum(amount)
for dt in ([01/02], [02/02], [03/02], [04/05], [05/05])
)p
order by jobid, name
Lihat SQL Fiddle dengan Demo
Cara kedua adalah dengan menggunakan PIVOT Dinamis untuk mengidentifikasi pada saat run-time nilai untuk beralih ke kolom.
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ',' + QUOTENAME(convert(char(5), dt, 101))
from test
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT name, id, ' + @cols + ', jobid from
(
select name, id, convert(char(5), dt, 101) dt, jobid, amount
from test
) x
pivot
(
sum(amount)
for dt in (' + @cols + ')
) p
order by jobid, name'
execute(@query)
Lihat SQL Fiddle dengan Demo
Keduanya akan menghasilkan hasil yang sama. Dinamis berfungsi dengan baik saat Anda tidak mengetahui nilai sebelumnya untuk mengonversi ke kolom.