Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помогите с запросом  [new]
giigro
Member

Откуда: Москва
Сообщений: 247
Привет всем

  select 1 id, 'year' period, 10 val, 1 addit from dual
     union all
     select 2 id, 'month' period, 20 val, 1 addit from dual
     union all
     select 3 id, 'year' period, 30 val, 2 addit from dual
     union all
     select 4 id, 'month' period, 40 val, 2 addit from dual

Нужно вытащить все id, где period='year' с агрегированными суммами по val. Но суммироваться должно только там, где addit = 1
Ожидаемый результат:
ID            SUM(VAL)
---------- ----------
         1         10
         3         0
15 дек 12, 16:34    [13636688]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
st0ne
Member

Откуда:
Сообщений: 61
giigro,

группировать то по какому полю?
приведи полный пример исходных данных
15 дек 12, 16:37    [13636697]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
giigro
Member

Откуда: Москва
Сообщений: 247
st0ne
giigro,

группировать то по какому полю?
приведи полный пример исходных данных

Группировать надо по id, но чтобы агрегирование было с дополнительным ограничением
15 дек 12, 16:43    [13636709]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
giigro,

sum(case..) или sum(decode..)
15 дек 12, 16:46    [13636718]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
st0ne
Member

Откуда:
Сообщений: 61
giigro,

select id,nvl(sum(decode(addit,1,val)),0) from t
having count(decode(period,'year',1)) > 0
group by id;
15 дек 12, 16:51    [13636729]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
giigro
Member

Откуда: Москва
Сообщений: 247
orawish
giigro,

sum(case..) или sum(decode..)

а ларчик просто открывался!
with a as(
     select 1 id, 'year' period, 10 val, 1 addit from dual
     union all
     select 2 id, 'month' period, 20 val, 1 addit from dual
     union all
     select 3 id, 'year' period, 30 val, 2 addit from dual
     union all
     select 4 id, 'month' period, 40 val, 2 addit from dual
  )          
  select id,
         sum(case
               when addit = 1 then
                val
               else
                0
             end)
    from a
   where period = 'year'
   group by id

Спасибо, orawish!
15 дек 12, 16:51    [13636731]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Я на измене
Guest
st0ne
select id,nvl(sum(decode(addit,1,val)),0) from t
having count(decode(period,'year',1)) > 0
group by id;

А что, WHERE уже отменили ?
15 дек 12, 23:55    [13637725]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
st0ne
Member

Откуда:
Сообщений: 61
giigro
вытащить все id, где period='year'
giigro
суммироваться должно только там, где addit = 1
giigro
Группировать надо по id

with t as(
     select 1 id, 'year' period, 10 val, 1 addit from dual
     union all
     select 2 id, 'month' period, 20 val, 1 addit from dual
     union all
     select 3 id, 'year' period, 30 val, 2 addit from dual
     union all
     select 4 id, 'month' period, 40 val, 1 addit from dual
     union all
     select 4 id, 'year' period, 40 val, 2 addit from dual
  ) 


  select id,nvl(sum(decode(addit,1,val)),0) from t
having count(decode(period,'year',1)) > 0
group by id;  

idsum
1 10
4 40
3 0

  select id,
         sum(case
               when addit = 1 then
                val
               else
                0
             end)
    from t
  where period = 'year'
   group by id

idsum
1 10
4 0
3 0


экстрасенсорикой не обладаю
16 дек 12, 07:08    [13638147]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
Я на измене
Guest
st0ne,

Извини, дружище, это я затупил. Что-то подумал, что твой HAVING равносилен простому условию

where period = 'year'
17 дек 12, 14:29    [13642924]     Ответить | Цитировать Сообщить модератору
 Re: Помогите с запросом  [new]
-2-
Member

Откуда:
Сообщений: 15330
st0ne
экстрасенсорикой не обладаю
однако додумал неуникальность id и суммирование "только", указанное после "где", посчитал нужным сделать в обратном порядке.
17 дек 12, 23:25    [13646210]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить