ber*_*d_k 5 sql oracle pivot sql-server-2005
看看语法,我得到了强烈的印象,PIVOT不支持除了为单元格计算的单个聚合函数之外的任何东西.
从统计视图显示一些平均值而不给出平均所指的案例数量是非常不满意的(这是礼貌版本).
是否有一些很好的模式来评估基于avg和pivotots的基于计数的枢轴并将它们混合在一起以产生一个好的结果?
同时......在它的细胞中。所以你的意思是在同一个单元格内,因此作为 varchar ?
您可以在使用数据透视之前计算聚合查询中的平均值和计数值,并将它们作为文本连接在一起。
PIVOT 运算符在这里的作用只是将行转换为列,并且仅使用某些聚合函数(例如 MAX/MIN),因为语法需要它 - 您的预先计算aggregate query每个透视列只有一个值。
在 bernd_k 的 oracle/mssql 解决方案之后,我想指出在 SQL Server 中执行此操作的另一种方法。它需要将多个列简化为单个列。
SELECT MODULE,
modus + '_' + case which when 1 then 'AVG' else 'COUNT' end AS modus,
case which when 1 then AVG(duration) else COUNT(duration) end AS value
FROM test_data, (select 1 as which union all select 2) x
GROUP BY MODULE, modus, which
SELECT *
FROM (
SELECT MODULE,
modus + '_' + case which when 1 then 'AVG' else 'COUNT' end AS modus,
case which when 1 then CAST(AVG(1.0*duration) AS NUMERIC(10,2)) else COUNT(duration) end AS value
FROM test_data, (select 1 as which union all select 2) x
GROUP BY MODULE, modus, which
) P
PIVOT (MAX(value) FOR modus in ([A_AVG], [A_COUNT], [B_AVG], [B_COUNT])
) AS pvt
ORDER BY pvt.MODULE
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,AVG 和 COUNT 是兼容的(count - int => numeric)。如果不是,请将两者显式转换为兼容类型。
注 - 由于整数平均,第一个查询显示 M2/A 的 AVG 为 2。第二个(旋转)查询显示考虑小数的实际平均值。