SELECT * FROM 
 [SELECT 名称, 管, 长度 FROM 表 WHERE  (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )) AND (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL  AS TIMYYBUILD2000  
GROUP BY 名称, 管 ORDER BY 名称, 管

解决方案 »

  1.   

    非常感谢qiaozhiwei(乔) 还的请教一下
    SELECT * FROM 
     SELECT 名称, 管, 长度 FROM 表 WHERE  (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )) AND (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL  AS TIMYYBUILD2000  
    GROUP BY 名称, 管 ORDER BY 名称, 管
    这样写提示表无效 "表"是存在的
     SELECT 名称, 管, 长度 FROM 表 WHERE  (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )) AND (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL  AS TIMYYBUILD2000  
    这不分怎么写,我加了括号也不好用
      

  2.   

    不好意思,这样试试
    WHERE
         (
          ( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) 
           OR 
          (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )
         ) AND 
        (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL 
      

  3.   

    我的意思是
    select * from  aa
     
    aa: 表示   SELECT 名称, 管, 长度 FROM 表 WHERE  (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )) AND (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL  AS TIMYYBUILD2000   AS TIMYYBUILD2000   相当于表名
    我这样设计可以吗 access实现了
      

  4.   

    这个明白,我是指你用OR连接的两个条件
    (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' ))
    这个条件不是等同于
    (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )吗,
    按照你的意思:
    SELECT * FROM 
     (SELECT 名称, 管, 长度 FROM 表 WHERE  (( TO_CHAR(日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5'  AND 更换日期 IS NULL ) OR (TO_CHAR(更换日期,'YYYY') BETWEEN TO_CHAR(SYSDATE,'YYYY') AND TO_CHAR(SYSDATE,'YYYY')-'5' )) AND (名称 = '十厂') AND 名称  IS NOT  NULL  AND 管 IS NOT NULL ) TIMYYBUILD2000  
    GROUP BY 名称, 管 ORDER BY 名称, 管
      

  5.   

    那个or 是通过程序构造出来的.谢谢!!非常感谢
    这样好用了,不过我想问一下为什么不用as就可以了呢?
      

  6.   

    我所知道的,as用于字段名之后表示字段的表示,表的标识则不必,这是oracl中的语法