【发布时间】:2016-02-10 15:25:01
【问题描述】:
在 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 年开始,我认为我有几年,但我只想要最后三年。我希望当我添加一个可以提高性能的地方时。
【问题讨论】:
-
我不明白这个问题。
IN子句中未提及的任何具有pivot_column值的行都会被PIVOT操作本身自动排除。 -
Demo 按照目前的要求,根本不需要
WHERE。 -
我问是因为我认为明确的 WHERE 子句会提高性能。那么 PIVOT 是隐含的 WHERE 吗?
-
不是这样的。其他行的数据无处可去go。而在 SQL 中,您告诉系统您想要什么,而不是如何去做。不要尝试添加“为了性能”的东西。
-
@Damien_The_Unbeliever 将此作为答案 - 我会接受。
标签: sql sql-server tsql pivot