T-SQL pivot where子句

时间:2016-02-10 15:25:02

标签: sql sql-server tsql pivot

在SQL Server中

我想要PIVOT一个表并添加一个WHERE子句但我无法弄清楚语法。

数据

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

现在我想从视图中获取只有我将PIVOT的年份的行,所以我想添加

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

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

问题

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

为什么

表现。在视图中我从1990年开始有多年,但我只想要最后几年。我希望当我添加一个提高性能的地方时。

1 个答案:

答案 0 :(得分:4)

据我所知,你想限制传递给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