Sql Oracle中定义不明确的列
我试图在Oracle中执行CASE,但我遇到了这个错误 我在SQL SERVER中也做了类似的事情,并且它可以正常工作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
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;
(注意:在分组依据
子句中,您可能还需要日期
。)