有张表 a
time       ,库存  
2011-9-1 ,  1000
 怎样根据这张表写个VIEW,得到  去年同期库存(就是2010年9月1号库存的量)   这个字段,效果如下 表b
time       ,库存 ,去年同期库存 
2011-9-1 ,  1000  ,2000

解决方案 »

  1.   

    -- 如果同期库存是指去年的同一天的库存的话,可以这样写:
    select trunc(a1.time,'DD') as time1, a1.库存 a2.库存
    from a a1 left join a a2 on trunc(a1.time,'DD')=trunc(add_months(a2.time,12),'DD');
      

  2.   


    -- 前提:你的 time字段,是 date 类型的字段!
      

  3.   

    select * from a where substr(to_char(time,'YYYY-MM-DD'),5,6) = substr(to_char(sysdate,'YYYY-MM-DD'),5,6) and substr(to_char(time,'YYYY-MM-DD'),1,4) = '2010'select * from a where substr(to_char(time,'YYYY-MM-DD'),5,6) = substr(to_char(sysdate,'YYYY-MM-DD'),5,6) and to_number(substr(to_char(time,'YYYY-MM-DD'),1,4)) = to_number(substr(to_char(sysdate,'YYYY-MM-DD'),1,4)) - 1
      

  4.   


    --假如time字段为varchar2型的,且格式为:yyyy-mm-dd
    select a1.time,a1.库存,a2.库存
    from a a1,a a2
    where a1.time = to_char(add_months(to_date(a2.time),12),'yyyy-mm-dd')
      

  5.   

     
     我按照你的写了个view,可是一直报这错:duplicate column name  怎么回事呢
      

  6.   

    -- 这样执行一下:
    select trunc(a1.time,'DD') as time1, 
           a1.库存 as "今年库存",
           a2.库存 as "去年库存"
    from a a1 left join a a2 on trunc(a1.time,'DD')=trunc(add_months(a2.time,12),'DD');
      

  7.   

    你两列的名称都叫“库存”,肯定重复了,改下:
    select trunc(a1.time,'DD') as time1, a1.库存 as 今年库存, a2.库存 as 去年库存
    from a a1 left join a a2 on trunc(a1.time,'DD')=trunc(add_months(a2.time,12),'DD');
      

  8.   

    a1.库存 a2.库存-- 要修改成:a1.库存, a2.库存
    -- 中间丢了一个逗号,
    -- 哎,你一点应变能力也没有?一点纠错能力也没有?
      

  9.   

    -- 这个查询中,字段重名没关系,关键是丢失了一个逗号:
    scott@TBWORA> select emp.ename, emp.ename from emp;ENAME                ENAME
    -------------------- --------------------
    SMITH                SMITH
    ALLEN                ALLEN
    WARD                 WARD
    JONES                JONES
    MARTIN               MARTIN
    BLAKE                BLAKE
    CLARK                CLARK
    SCOTT                SCOTT
    KING                 KING
    TURNER               TURNER
    ADAMS                ADAMS
    JAMES                JAMES
    FORD                 FORD
    MILLER               MILLER已选择14行。
      

  10.   

    直接在 SQL Window 中写此代码就不会报错,但去年的库存根本没有数据   
      

  11.   

    http://hi.csdn.net/space-10157911-do-album-picid-906709-goto-down.html
      

  12.   

    scott@TBWORA> create view emp_vi as select ename, ename from emp;
    create view emp_vi as select ename, ename from emp
                                        *
    第 1 行出现错误:
    ORA-00957: 重复的列名-- 在创建视图的时候,列名必须唯一撒,猪!
    -- 你看你的语句:
    select trunc(t.time,'dd') as time1, t.kc, v.kc 
    ...-- 这样:会生成两个名为 kc 的字段名,字段名重复,所以出错!