Jag såg det här dynamiska pivotproblemet olika gånger. Och jag var tvungen. Efter att ha letat mycket kom jag fram till en lösning som fungerar utmärkt för mig. det är inte så elegant men det räddade mig. Vad jag gör är att först förbereda data i en temporär tabell, efter det skapar jag dynamiskt pivotsträngen (i ditt fall är det DD-MM) och tilldelar den till en variabel. Och till slut konstruerar jag en sql-sträng som ska köras som dynamisk sql .
Jag använde dina exempeldata och det verkar fungera. Hoppas detta 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