SQL Group由许多单独的列组成

时间:2015-02-09 16:48:22

标签: sql db2-400

我不知道该怎么称呼它或搜索什么。基本上我想通过许多单独的列来总结一个数量。我能想到的唯一方法是为每列做一个子查询。

有更简单的方法吗?感谢

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

2 个答案:

答案 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