繁体   English   中英

SQL Server:使用动态列选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM