首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在WHERE子句中使用别名

在WHERE子句中使用别名
EN

Stack Overflow用户
提问于 2008-12-10 16:31:40
回答 4查看 115.6K关注 0票数 70

我有一个查询,该查询旨在显示表A中最近没有足够更新的行。(每行应在“month_no”之后的2个月内更新。):

代码语言:javascript
复制
SELECT A.identifier
     , A.name
     , TO_NUMBER(DECODE( A.month_no
             , 1, 200803 
             , 2, 200804 
             , 3, 200805 
             , 4, 200806 
             , 5, 200807 
             , 6, 200808 
             , 7, 200809 
             , 8, 200810 
             , 9, 200811 
             , 10, 200812 
             , 11, 200701 
             , 12, 200702
             , NULL)) as MONTH_NO
     , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A
     , table_b B
 WHERE A.identifier = B.identifier
   AND MONTH_NO > UPD_DATE

WHERE子句中的最后一行导致"ORA-00904无效标识符“错误。不用说,我不想在WHERE子句中重复整个解码函数。有什么想法吗?(修复和变通方法都接受...)

EN

回答 4

Stack Overflow用户

发布于 2012-01-06 14:48:21

代码语言:javascript
复制
 SELECT A.identifier
 , A.name
 , TO_NUMBER(DECODE( A.month_no
         , 1, 200803 
         , 2, 200804 
         , 3, 200805 
         , 4, 200806 
         , 5, 200807 
         , 6, 200808 
         , 7, 200809 
         , 8, 200810 
         , 9, 200811 
         , 10, 200812 
         , 11, 200701 
         , 12, 200702
         , NULL)) as MONTH_NO
 , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
FROM table_a A, table_b B
WHERE .identifier = B.identifier
HAVING MONTH_NO > UPD_DATE
票数 16
EN

Stack Overflow用户

发布于 2009-10-15 18:57:39

或者,您可以在HAVING子句中使用别名

票数 11
EN

Stack Overflow用户

发布于 2017-02-14 13:49:23

就像你可以做的另一种方法一样:

代码语言:javascript
复制
WITH inner_table AS
(SELECT A.identifier
    , A.name
    , TO_NUMBER(DECODE( A.month_no
      , 1, 200803 
      , 2, 200804 
      , 3, 200805 
      , 4, 200806 
      , 5, 200807 
      , 6, 200808 
      , 7, 200809 
      , 8, 200810 
      , 9, 200811 
      , 10, 200812 
      , 11, 200701 
      , 12, 200702
      , NULL)) as MONTH_NO
    , TO_NUMBER(TO_CHAR(B.last_update_date, 'YYYYMM')) as UPD_DATE
  FROM table_a A
    , table_b B
  WHERE A.identifier = B.identifier)

    SELECT * FROM inner_table 
    WHERE MONTH_NO > UPD_DATE

您还可以为您的队列创建一个永久视图并从视图中进行选择。

代码语言:javascript
复制
CREATE OR REPLACE VIEW_1 AS (SELECT ...);
SELECT * FROM VIEW_1;
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/356675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档