簡體   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