我尝试选择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"
我需要改变什么?
答案 0 :(得分:3)
CTN_QUANTITY
被定义为SELECT
子句中表达式的别名。但是你想在WHERE
子句中使用它。这不起作用 - 在WHERE
之前处理SELECT
。您必须在count(SDB.CTN_MAIN)
子句中使用WHERE
,而不是别名。
然后:计数始终是一个数字,但您将它与空字符串进行比较。在Oracle中NULL
,但无论如何,它都没有意义。而且,COUNT
可能为零,永远不应为NULL
。
您可能需要撰写WHERE count(....) <> 0
。
编辑:当然,正如下面的评论中讨论的那样...... COUNT过滤器不属于WHERE子句,它应该在HAVING子句中。
答案 1 :(得分:-1)
您必须使用IS NOT NULL
代替&lt;&gt; 。此外,您不能在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
建议来了解更多信息。