这似乎应该是一个常见的需求,但我不知道如何使用 T-SQL PIVOT 函数来做到这一点。具体来说,我想计算数据透视列值上的列的 AVG 和 STDEV。数据看起来像这样(省略了很多数据,但这触及核心):
--------------------------------------------------------------------------
ID Year PersonID Score
--------------------------------------------------------------------------
106 2001 1 20
107 2002 1 30
108 2003 1 40
109 2004 1 50
106 2002 2 20
107 2003 2 50
108 2004 2 30
109 2005 2 10
--------------------------------------------------------------------------
我想看到以下输出
--------------------------------------------------------------------------
NonPivotCol1 NonPivotCol2 2001_Mean 2001_Avg 2002_Mean 2002_Avg Etc
--------------------------------------------------------------------------
Some Value Some Value 32 5.2 28 3.1
Etc.
--------------------------------------------------------------------------
我需要恢复到旧的 CASE 语句逻辑吗?
谢谢!
最佳答案
是的。
只需使用旧式CASE
语法即可。
SELECT AVG(CASE WHEN Year = 2001 THEN Score END) AS 2001_Avg,
STDEV(CASE WHEN Year = 2001 THEN Score END) AS 2001_StDev /*...*/
PIVOT
无论如何只是(不太通用的)语法糖。
Oracle supports multiple aggregates在 PIVOT
中,但 TSQL 没有。
关于sql-server - 同一列上具有多个聚合的 T-SQL Pivot,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18176138/