是的,您可以使用动态SQL来实现您的愿望。首先,创建一个变量来保存将发生变化的列的名称。然后,创建另一个变量来保存动态生成的查询。最后,使用
sp_executesql
以运行此动态查询。代码将如下所示:
declare @colname varchar(50) = ''
declare @query nvarchar(8000) = 'INSERT INTO @temp (ranking,item,groupCount,groupName)'
+ 'SELECT RANK() OVER(ORDER BY COUNT(*) desc,' + @colname + ') [Rank],' + @colname
+ 'COUNT(*) AS groupCount, 'currentMonth' AS groupName FROM Log_PE'
+ 'WHERE CONVERT(DATE, dateEsc, 120) >= CONVERT(DATE, CONVERT(VARCHAR(6), GETDATE(),112)
+ '01', 112)'
+ 'GROUP BY ' + @colname
+ ' ORDER BY groupCount desc, ' + @colname
execute sp_executesql @query