T-SQL枢轴where子句

Rob*_*roj 1 sql t-sql sql-server pivot

在SQL Server中,我想要PIVOT表并添加WHERE子句,但我无法弄清楚语法。

数据

dbo.SOME_VIEW
YEAR  AMOUNT
====================
2014  1
2013  2
2012  5.6
2011  574
2010  123
Run Code Online (Sandbox Code Playgroud)

查询

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

现在,我只想从视图中获得将要年份的行,因此我想添加

WHERE YEAR IN (2012, 2013, 2014)

我尝试过的

放在WHERE之后FROM SOME_VIEW

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

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

使用PIVOT时在哪里可以添加WHERE子句?

为什么

为了表现。我认为我有1990年以来的岁月,但我只想要最后三年。我希望当我添加一个可以提高性能的地方。

Kam*_*ami 5

据我了解,您想限制传递给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 
Run Code Online (Sandbox Code Playgroud)

结果:

在此处输入图片说明