Колонка двусмысленно определена в Oracle - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь сделать CASE WHEN в Oracle, но я получаю эту ошибку.

Нечто подобное я делаю в SQL SERVER, и это работает.

 SELECT SUM(amount) as AMOUNT,Substr(con.DATES, 1,6 ) as DATES,
       CASE
          WHEN pro.cod_grup in ('54') and pro.cod_grup_2 in ('38')
            THEN 'WORKSHOPS'
            end as "ORIGIN"
   FROM AMOUNTS_B con inner join PRODUCTOS pro on con.product = pro.cod_product
        where DATES >= '20180101'
        group by FECHA, ORIGIN;

Еслитаблицы имеют псевдонимы, почему возникает ошибка?

1 Ответ

0 голосов
/ 15 октября 2018

В ваших таблицах нет столбца ORIGIN, то есть псевдонима, определенного вами в предложении SELECT, и вы не можете использовать этот псевдоним в предложении GROUP BY.

Либо повторите CASE оператор:

SELECT SUM(amount) as AMOUNT,
       Substr(con.DATES, 1,6 ) as DATES,
       CASE
         WHEN pro.cod_grup in ('54') and pro.cod_grup_2 in ('38')
         THEN 'WORKSHOPS'
       end as "ORIGIN"
FROM   AMOUNTS_B con
       inner join PRODUCTOS pro
       on con.product = pro.cod_product
WHERE  Substr(con.DATES, 1,6 ) >= '20180101'
group by FECHA,
       CASE
         WHEN pro.cod_grup in ('54') and pro.cod_grup_2 in ('38')
         THEN 'WORKSHOPS'
       end;

или использовать внешний запрос, который может использовать псевдоним:

SELECT SUM(amount) as AMOUNT,
       DATES,
       ORIGIN
FROM   (
  SELECT amount,
         fecha,
         Substr(con.DATES, 1,6 ) as DATES,
         CASE
           WHEN pro.cod_grup in ('54') and pro.cod_grup_2 in ('38')
           THEN 'WORKSHOPS'
         end as "ORIGIN"
  WHERE  Substr(con.DATES, 1, 6 ) >= '20180101'
  FROM   AMOUNTS_B con
         inner join PRODUCTOS pro
         on con.product = pro.cod_product
)
group by FECHA,
       ORIGIN;

(Примечание: вам также может понадобиться DATES в GROUP BY пункт.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...