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