मैंने इस गतिशील धुरी समस्या को अलग-अलग बार देखा। और मेरे पास यह था। बहुत खोज करने के बाद मैं एक समाधान पर आया जो मेरे लिए बहुत अच्छा काम करता है। यह इतना सुंदर नहीं है, लेकिन इसने मुझे बचा लिया। मैं जो करता हूं वह पहले अस्थायी तालिका में डेटा तैयार करता है, उसके बाद मैं गतिशील रूप से पिवट स्ट्रिंग बना देता हूं (आपके मामले में यह डीडी-एमएम है) इसे एक चर के लिए असाइन करता है। और अंत में मैं गतिशील एसक्यूएल के रूप में निष्पादित करने के लिए एक एसक्यूएल स्ट्रिंग का निर्माण करता हूं ।
मैंने आपका नमूना डेटा इस्तेमाल किया और ऐसा लगता है कि यह काम करता है। आशा है कि यह मदद करता है
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