我不知道该怎么称呼它或搜索什么。基本上我想通过许多单独的列来总结一个数量。我能想到的唯一方法是为每列做一个子查询。
有更简单的方法吗?感谢
select q1.id, q1.amt state, q2.amt city ...
from
(select id,state,sum(paid) amt
from tableA
group by id,state) q1
inner join
(select id,city,sum(paid) amt
from tableA
group by id,city) q2
on q1.id = q2.id
答案 0 :(得分:1)
我猜想,对于每个id
,您希望每个维度(例如城市和州)的总和为amt
。
如果是这样,您可以使用window / analytic / olap函数。类似的东西:
select id, sum(amt) over (partition by state) as state_amt,
sum(amt) over (partition by city) as city_amt
from tableA;
答案 1 :(得分:0)
感谢Gordon对使用OLAP功能的见解。 db2 for i不支持“分区依据”之类的OLAP功能。我最终得到了这个,我将不得不总结每一栏
select id,
case when GROUPING(STATE) = 0
then sum(PAID)
end STATE,
case when GROUPING(CITY) = 0
then sum(PAID)
end CITY ...
FROM TABLEA
GROUP BY ID, GROUPING SETS((ID,STATE),(ID,CITY)....)
GROUPING SETS为每个组创建记录而不是列 GROUPING表示记录所属的集合(当为0时)
示例:
GROUPING
ID STATE CITY PAID
1A 0 1 500.00
1A 1 0 250.00
使用分组查看分配付款的地方
ID STATE CITY
1A 500.00 NULL
1A NULL 250.00