Jeg så dette dynamiske pivotproblem forskellige gange. Og det måtte jeg. Efter at have søgt meget kom jeg frem til en løsning, der fungerer godt for mig. det er ikke så elegant, men det reddede mig. Det, jeg gør, er først at forberede dataene i en midlertidig tabel, derefter opretter jeg dynamisk pivotstrengen (i dit tilfælde er det DD-MM) og tildeler den til en variabel. Og til sidst konstruerer jeg en sql-streng, der skal udføres som dynamisk sql .
Jeg brugte dine prøvedata, og det ser ud til at virke. Håber dette hjælper
select
userid,
browsername,
CAST(day(logintime) as nvarchar(2)) + '-' + CAST(Month(logintime) AS nVARCHAR(2)) AS period
INTO #TMP
from user_log_table order by 1
DECLARE @cols AS NVARCHAR(MAX), @query AS NVARCHAR(MAX)
select @cols = STUFF((SELECT distinct ','
+ QUOTENAME(convert(varchar(10), period, 120))
from #TMP order by 1
FOR XML PATH(''), TYPE
).value('.', 'NVARCHAR(MAX)')
,1,1,'')
set @query = 'SELECT userid, browsername,' + @cols + ' from
(
select userid, browsername, period
from #TMP
) x
pivot
(
count(period)
for period in (' + @cols + ')
) p '
exec(@query)
drop table #TMP