Sql Oracle中定义不明确的列

Sql Oracle中定义不明确的列,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,我试图在Oracle中执行CASE,但我遇到了这个错误 我在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

我试图在Oracle中执行CASE,但我遇到了这个错误

我在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;

如果表有别名,为什么会发生错误?

您的表没有
ORIGIN
列,这是您在
SELECT
子句中定义的别名,不能在
groupby
子句中使用该别名

重复
案例
语句:

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;

(注意:在
分组依据
子句中,您可能还需要
日期

您的表没有
原点
列,这是您在
选择
子句中定义的别名,不能在
分组依据
子句中使用该别名

重复
案例
语句:

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;
(注意:在
分组依据
子句中,您可能还需要
日期
。)