2016-02-10 65 views
1

我想要PIVOT一個表並添加一個WHERE子句,但我無法弄清楚語法。T-SQL pivot在SQL Server中的子句

數據

dbo.SOME_VIEW 
YEAR AMOUNT 
==================== 
2014 1 
2013 2 
2012 5.6 
2011 574 
2010 123 

查詢

SELECT 
    * 
FROM SOME_VIEW 
PIVOT (SUM(AMOUNT) FOR [YEAR] IN ([2012], [2013], [2014])) AS PIVOTED 

現在我想從視圖中僅與一年的行,我將支點,所以我想添加

得到

WHERE YEAR IN (2012, 2013, 2014)

我有什麼後FROM SOME_VIEW

SELECT 
    * 
FROM SOME_VIEW WHERE YEAR IN (2012, 2013, 2014) 
PIVOT (SUM(AMOUNT) FOR [YEAR] IN ([2012], [2013], [2014])) AS PIVOTED 

試圖

WHERE我得到:Incorrect syntax near the keyword 'PIVOT'。當我在末尾添加WHERE時,我得到Invalid column name 'YEAR'

問題

我在哪裏可以添加WHERE子句當我使用PIVOT?

爲什麼

爲了表現。在我看來,自1990年以來,我只有最後三年。我希望當我添加一個我提高性能的地方。

+6

我不明白的問題。 'IN'子句中沒有提及的'pivot_column'值的任何行都會被'PIVOT'操作自動排除。 –

+1

** [Demo](https://data.stackexchange.com/stackoverflow/query/434756)**根據當前需求,根本不需要'WHERE'。 – lad2025

+0

我問,因爲我認爲明確的WHERE子句可以提高性能。那麼PIVOT隱式的WHERE? –

回答

3

據我所知,你想限制傳遞給PIVOT的年份。

您可以通過使用公用表表達式來做到這一點。

這應該爲你工作:

;WITH CTE AS (SELECT 
* 
FROM #SOME_VIEW 
WHERE [YEAR] IN (2012, 2013, 2014)) 

SELECT 
* 
FROM CTE 
PIVOT (SUM(AMOUNT) FOR [YEAR] IN ([2012], [2013], [2014])) AS PIVOTED 

結果:

enter image description here