我在Oracle表(tab1
)中有以下示例数据,我正在尝试将行转换为列.我知道如何在一列上使用Oracle pivot.但是可以将它应用于多个列吗?
样本数据:
Type weight height
A 50 10
A 60 12
B 40 8
C 30 15
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
A-count B-count C-count A-weight B-weight C-weight A-height B-height C-height
2 1 1 110 40 30 22 8 15
Run Code Online (Sandbox Code Playgroud)
我可以做什么:
with T AS
(select type, weight from tab1 )
select * from T
PIVOT (
count(type)
for type in (A, B, C, D,E,F)
)
Run Code Online (Sandbox Code Playgroud)
以上查询给出了以下结果
A B C
2 1 1
Run Code Online (Sandbox Code Playgroud)
我可以count(*)
用sum(weight)
或替换sum(height)
高度或重量.我想要做的,但我不能做,是在一个查询中转动所有三个(计数,重量和高度).
可以用枢轴完成吗?
这似乎应该是一个常见的需求,但我没有看到如何使用T-SQL PIVOT函数来做到这一点.具体来说,我想在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
--------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我想看到以下输出
--------------------------------------------------------------------------
NonPivotCol1 NonPivotCol2 2001_Mean 2001_Avg 2002_Mean 2002_Avg Etc
--------------------------------------------------------------------------
Some Value Some Value 32 5.2 28 3.1
Etc.
--------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)
我是否需要恢复旧的CASE语句逻辑?
谢谢!