2015-02-09 2 views
0

Я не уверен, что назвать этим или что искать. В принципе, я хочу суммировать сумму по многим отдельным столбцам. Единственный способ, которым я могу это сделать, - сделать подзапрос для каждого столбца.SQL Group по многим отдельным столбцам

Есть ли более простой способ сделать это? Благодаря

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; 
+0

Спасибо за подсказку использовать OLAP, я на DB2 для iSeries для раздела недоступен. – Abercrombieande

+1

В руководстве SQL 7.1 для DB2 for i есть спецификации OLAP, в том числе «partition by». –

0

Спасибо Гордону за понимание использования функций OLAP. Те же функции OLAP, что и «partition by», недоступны для db2 для i. Я закончил с этим, что я должен буду обернуть суммировать каждый столбец

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 НАБОРЫ создает записи не столбцы для каждой группы ГРУППИРОВКИ указывает, что установлен рекорд принадлежит (при 0)

Пример:

гРУППИРОВАНИЕ

ID STATE CITY PAID 
1A 0  1 500.00 
1A 1  0 250.00 

ИСПОЛЬЗОВАНИЕ группирование чтобы увидеть, где выделить PAID

ID STATE CITY 
1A 500.00 NULL 
1A NULL 250.00 
Смежные вопросы