Tôi đã thấy vấn đề xoay trục động này vào các thời điểm khác nhau. Và tôi đã có nó. Sau khi tìm kiếm rất nhiều, tôi đã đi đến một giải pháp phù hợp với tôi. nó không phải là thanh lịch nhưng nó đã cứu tôi. Những gì tôi làm trước tiên là chuẩn bị dữ liệu trong một bảng tạm thời, sau đó tôi tự động tạo chuỗi pivot (trong trường hợp của bạn là DD-MM) gán nó cho một biến. Và cuối cùng, tôi xây dựng một chuỗi sql để thực thi dưới dạng sql động .
Tôi đã sử dụng dữ liệu mẫu của bạn và nó có vẻ hoạt động. Hy vọng điều này sẽ giúp
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