我有以下查詢需要2個參數。SQL Server 2005 - 基於在主要查詢中傳遞的變量的列名稱
- YearNumber
- MonthNumber
在我的支點查詢,我想基於@Year_Rtl
變量來選擇列。我需要選擇去年,去年和去年的數據。由於UI上顯示的數據是表格格式除以@Year_Rtl
,因此我決定爲其編寫一個數據透視表,如下所示。
在查詢中,如果我硬編碼[@Year_Rtl], [@Year_Rtl - 1], [@Year_Rtl - 2]
到[2012], [2011], [2010]
,它工作正常。但是,由於過去的一年可以是任何事情,我希望動態地命名列。
DECLARE @Month_Rtl int
DECLARE @Year_Rtl int
SET @Year_Rtl = 2012
SET @Month_Rtl = 1
SELECT
'Data 1', [@Year_Rtl], [@Year_Rtl - 1], [@Year_Rtl - 2]
FROM
(SELECT [Yr_No], Qty
FROM dbo.Table1 t
WHERE (t.Col1 = 10) AND
(t.Col2 = '673') AND
((t.Mth_No = @Month_Rtl AND t.Yr_No = @Year_Rtl) OR
(t.Mth_No = 12 AND t.Yr_No IN (@Year_Rtl - 1, @Year_Rtl - 2)))
) p PIVOT (SUM(Qty)
FOR [Yr_No] IN ([@Year_Rtl], [@Year_Rtl-1], [@Year_Rtl-2])
) AS pvt
上面的查詢拋出以下錯誤:
錯誤轉換數據類型爲nvarchar到SMALLINT。
錯誤值「@Year_Rtl」在PIVOT運算符中提供。
無效的列名'@Year_Rtl - 1'。
無效的列名'@Year_Rtl - 2'。
參與'PIVOT'的列不能是可變的,使用動態SQL的外部。是的,它很糟糕。這只是它的方式。 – Yuck 2012-02-27 20:07:45
我能夠將整個查詢創建爲動態SQL。想知道它是否會達到性能? – Asdfg 2012-02-27 20:22:42
據我所知,動態列擺動只能通過動態SQL來實現 - 當然,它不會像存儲查詢計劃那樣具有良好的性能,但是它或者不具備查詢功能。 – 2012-02-27 20:25:11