我有一个来自下表的数据透视表:
+---------+---+-----+
| A | B | C |
+-+---------+---+-----+
|1| Date |Id |Value|
+-+---------+---+-----+
|2|4/01/2013|1 |4 |
+-+---------+---+-----+
|3|4/01/2013|2 |5 |
+-+---------+---+-----+
|4|4/01/2013|1 |20 |
+-+---------+---+-----+
|5|4/02/2013|2 |20 |
+-+---------+---+-----+
|6|4/02/2013|1 |15 |
+-+---------+---+-----+
我想首先通过Id聚合然后按日期聚合,使用Max聚合Id,然后使用Sum聚合按日期聚合。结果表如下所示:
+---------+----------------+
| A | B |
+-+---------+----------------+
|1| Date |Sum(Max(Id,Date)|
+-+---------+----------------+
|2|4/01/2013|25 |
+-+---------+----------------+
|3|4/02/2013|35 |
+-+---------+----------------+
上面的25来自于每个日期获得最大每次ID(最大值(1,4 / 01/2013) - > 20和Max(2,4 / 01/2013) - > 5,所以总和那些Max是25。
我可以通过在数据透视表的Rows部分添加Date和Id列来轻松完成两个级别的聚合,但是当为Value选择聚合函数时,我可以选择Max,获得Max of Max或Sum得到总和。也就是说,我无法获得最大值的总和。
你知道如何实现这个目标吗?理想情况下,解决方案不是计算数据透视表,然后从那里复制或获取公式,因为如果我想动态更改字段,那将很容易破坏。
谢谢!
答案 0 :(得分:0)
这是我在SQL中的方式:
SELECT DATE, SUM(MAXED_VAL) as SummedMaxedVal
FROM (
SELECT DATE, ID, MAX(VALUE) as MAXED_VAL
FROM table
GROUP BY DATE, ID
)
GROUP BY DATE