[英]SQL Server: Select with dynamic column
我有以下内容的存储过程。 现在,对于几种不同的情况,我将需要完全相同的过程,唯一的区别是,我将引用另一列而不是“策略”。
为了避免编写多个存储过程,是否有一种方法可以使用变量输入来定义此特定列,而不必使整个过程动态化?
INSERT INTO @temp
(
ranking,
item,
groupCount,
groupName
)
SELECT RANK() OVER(ORDER BY COUNT(*) desc, policy) [Rank],
policy,
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 policy
ORDER BY groupCount desc, policy
非常感谢您对此Tim的帮助。
是的,您可以使用动态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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.