扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
请教一个关于sql语句的伪列简单问题。
有如下sql:我把TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO 定义成伪列DT_FLWORINTERPS ,为什么在where条件中不能用呢,sql提示无法识别的字符。
SQL code
SELECT FL.*,
TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO as DT_FLWORINTERPS --这里定义的伪列为什么在where语句中不能用呢???????????
FROM AIDSZH_SGRA_ADULT_FLW FL,
(SELECT CARD_ID,
MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
FROM AIDSZH_SGRA_ADULT_FLW F
WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
AND F.ZONECODE LIKE '371081%'
GROUP BY F.CARD_ID) FMAX
WHERE fl.DT_FLWORINTERPS = FMAX.DT_FLWORINTERP
AND FL.CARD_ID = FMAX.CARD_ID
不用伪列却很正常:
SQL code
SELECT FL.*
FROM AIDSZH_SGRA_ADULT_FLW FL,
(SELECT CARD_ID,
MAX(TO_CHAR(F.DT_FLWORINTERP, 'yyyy-mm-dd') || F.FLWNO) DT_FLWORINTERP
FROM AIDSZH_SGRA_ADULT_FLW F
WHERE F.DT_FLWORINTERP <= TO_DATE('2009-11-30', 'yyyy-mm-dd')
AND F.ZONECODE LIKE '371081%'
GROUP BY F.CARD_ID) FMAX
WHERE ((TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd')) || FL.FLWNO) = FMAX.DT_FLWORINTERP
AND FL.CARD_ID = FMAX.CARD_ID
TO_CHAR(FL.DT_FLWORINTERP, 'yyyy-mm-dd') || FL.FLWNO as DT_FLWORINTERPS
DT_FLWORINTERPS是列的别名,where子句中是不允许用列的别名的。
一定要用别名,可以先查fl,把它作为一个子查询。
select a.* from
(select to_char(...) as aaaa,fl.* from fl) a,
(select ...) b
where a. aaaa=b.aaaa
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者