Я не могу заставить этот запрос работать с функцией SUM - PullRequest
1 голос
/ 21 апреля 2010

Этот запрос выдает ошибку:

select ep, 
  case
    when ob is null and b2b_ob is null then 'a'
    when ob is not null or b2b_ob is not null then 'b'
    else null
  end as type,
  sum(b2b_d + b2b_t - b2b_i) as sales
from table
where ...
group by ep, type

Ошибка: ORA-00904: «ТИП»: неверный идентификатор

Когда я запускаю его с group by ep, появляется сообщение об ошибке:

ORA-00979: не выражение GROUP BY

Весь запрос работает нормально, если я удаляю строки sum(b2b_d+b2b_t-b2b_i) as sales и group by ..., поэтому проблема должна быть связана с функциями SUM и GROUP BY. Как я могу сделать эту работу? Заранее спасибо за помощь.

1 Ответ

4 голосов
/ 21 апреля 2010

К сожалению, SQL не позволяет вам использовать псевдонимы столбцов в предложении GROUP BY, поэтому вы должны либо повторить весь CASE там следующим образом:

select ep, 
  case
    when ob is null and b2b_ob is null then 'a'
    when ob is not null or b2b_ob is not null then 'b'
    else null
  end as type,
  sum(b2b_d + b2b_t - b2b_i) as sales
from table
where ...
group by ep,
  case
    when ob is null and b2b_ob is null then 'a'
    when ob is not null or b2b_ob is not null then 'b'
    else null
  end

или используйте встроенный вид, подобный этому:

select ep, 
  type,
  sum(b2b_d + b2b_t - b2b_i) as sales
from
( select ep, 
    case
      when ob is null and b2b_ob is null then 'a'
      when ob is not null or b2b_ob is not null then 'b'
      else null
    end as type,
    b2b_d,
    b2b_t,
    b2b_i
  from table
  where ...
)
group by ep, type
...