ORA-00904: "CTN_QUANTITY": - “%s: 无效标识符”
ORA-00904: "CTN_QUANTITY": - "%s: invalid identifier"
我尝试 select 行,其中 CTN_QUANTITY 不为空。我的查询
select distinct SDB.CTN_MAIN as S_CTN_MAIN,
SDB.SUBS_KEY as S_SUBS_KEY,
SDB.BAN_KEY as S_BAN_KEY,
count(SDB.CTN_MAIN) as CTN_QUANTITY,
FPCN.BAN_KEY as BAN_KEY
from STG_SDB_LOAD SDB, FCT_PREP_CHARGES_N FPCN
where FPCN.business_service_key = 33006
and CTN_QUANTITY <> ''
group by SDB.CTN_MAIN,
SDB.SUBS_KEY,
SDB.BAN_KEY,
FPCN.BAN_KEY;
我收到错误
ORA-00904. - "%s: invalid identifier"
我需要更改什么?
您必须使用 IS NOT NULL
代替 <> 。此外,您不能在 and
子句中使用别名。
select a.* from
(SELECT DISTINCT SDB.CTN_MAIN AS S_CTN_MAIN,
SDB.SUBS_KEY AS S_SUBS_KEY,
SDB.BAN_KEY AS S_BAN_KEY,
COUNT (SDB.CTN_MAIN) AS CTN_QUANTITY,
FPCN.BAN_KEY AS BAN_KEY
FROM STG_SDB_LOAD SDB, FCT_PREP_CHARGES_N FPCN
WHERE FPCN.business_service_key = 33006
GROUP BY SDB.CTN_MAIN,
SDB.SUBS_KEY,
SDB.BAN_KEY,
FPCN.BAN_KEY ) a
WHERE a.CTN_QUANTITY IS NOT NULL
要分析的东西:有这样的条件真的有用吗a.CTN_QUANTITY IS NOT NULL
。也许您可以通过重新搜索并考虑 @mathguy
建议来了解更多信息。
CTN_QUANTITY
被定义为 SELECT
子句中表达式的别名。但是您想在 WHERE
子句中使用它。那行不通 - WHERE
在 SELECT
之前处理。您必须在 WHERE
子句中使用 count(SDB.CTN_MAIN)
,而不是它的别名。
然后:计数始终是一个数字,但您将其与空字符串进行比较。在 Oracle 中是 NULL
,但无论如何,它没有意义。而且,COUNT
可能是零,它永远不应该是 NULL
.
您可能需要写 WHERE count(....) <> 0
。
编辑:当然,正如下面的评论中所讨论的......COUNT 过滤器不属于 WHERE 子句,它应该在 HAVING 子句中。
我尝试 select 行,其中 CTN_QUANTITY 不为空。我的查询
select distinct SDB.CTN_MAIN as S_CTN_MAIN,
SDB.SUBS_KEY as S_SUBS_KEY,
SDB.BAN_KEY as S_BAN_KEY,
count(SDB.CTN_MAIN) as CTN_QUANTITY,
FPCN.BAN_KEY as BAN_KEY
from STG_SDB_LOAD SDB, FCT_PREP_CHARGES_N FPCN
where FPCN.business_service_key = 33006
and CTN_QUANTITY <> ''
group by SDB.CTN_MAIN,
SDB.SUBS_KEY,
SDB.BAN_KEY,
FPCN.BAN_KEY;
我收到错误
ORA-00904. - "%s: invalid identifier"
我需要更改什么?
您必须使用 IS NOT NULL
代替 <> 。此外,您不能在 and
子句中使用别名。
select a.* from
(SELECT DISTINCT SDB.CTN_MAIN AS S_CTN_MAIN,
SDB.SUBS_KEY AS S_SUBS_KEY,
SDB.BAN_KEY AS S_BAN_KEY,
COUNT (SDB.CTN_MAIN) AS CTN_QUANTITY,
FPCN.BAN_KEY AS BAN_KEY
FROM STG_SDB_LOAD SDB, FCT_PREP_CHARGES_N FPCN
WHERE FPCN.business_service_key = 33006
GROUP BY SDB.CTN_MAIN,
SDB.SUBS_KEY,
SDB.BAN_KEY,
FPCN.BAN_KEY ) a
WHERE a.CTN_QUANTITY IS NOT NULL
要分析的东西:有这样的条件真的有用吗a.CTN_QUANTITY IS NOT NULL
。也许您可以通过重新搜索并考虑 @mathguy
建议来了解更多信息。
CTN_QUANTITY
被定义为 SELECT
子句中表达式的别名。但是您想在 WHERE
子句中使用它。那行不通 - WHERE
在 SELECT
之前处理。您必须在 WHERE
子句中使用 count(SDB.CTN_MAIN)
,而不是它的别名。
然后:计数始终是一个数字,但您将其与空字符串进行比较。在 Oracle 中是 NULL
,但无论如何,它没有意义。而且,COUNT
可能是零,它永远不应该是 NULL
.
您可能需要写 WHERE count(....) <> 0
。
编辑:当然,正如下面的评论中所讨论的......COUNT 过滤器不属于 WHERE 子句,它应该在 HAVING 子句中。