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 子句中使用它。那行不通 - WHERESELECT 之前处理。您必须在 WHERE 子句中使用 count(SDB.CTN_MAIN),而不是它的别名。

然后:计数始终是一个数字,但您将其与空字符串进行比较。在 Oracle 中是 NULL,但无论如何,它没有意义。而且,COUNT 可能是零,它永远不应该是 NULL.

您可能需要写 WHERE count(....) <> 0

编辑:当然,正如下面的评论中所讨论的......COUNT 过滤器不属于 WHERE 子句,它应该在 HAVING 子句中。