有这样一个表
时间(sdate)                   名称(sname)            电量(sdl)
---------------------------------------------------------  
2008-01-02                 三峡                   20
2008-01-02                 三峡                    30
2008-04-03                 三峡                    15
2008-04-04                 三峡                    242008-01-02                 葛洲坝                  22
2008-01-02                 葛洲坝                  33
2008-04-03                 葛洲坝                  14
2008-04-04                 葛洲坝                  26要求写一个select语句,能显示每个地区的当前日电量,当月电量和,当年电量和比如今天是2008-04-04,以三峡为例,日电量是24,月电量是(15+24=39),年电量是(30+20+15+24=89)
么查询的结果如下:
结构是这样的:单位                 日电量                  月电量                年电量
------------------------------------------------------------------
三峡                   24                     39                 89
葛洲坝                 26                  40                  95      

解决方案 »

  1.   

    select sname,sum(decode(trucn(sdate),trunc(sysdate),sdl,0)) day_dl,
    sum(decode(to_char(sdate,'yyyymm'),to_char(sysdate,'yyyymm'),sdl,0)) month_dl,
    sum(decode(to_char(sdate,'yyyy'),to_char(sysdate,'yyyy'),sdl,0)) year_dl
    from a
    group by sname
      

  2.   

    视图
     CREATE OR REPLACE FORCE VIEW view_table(单位, 日电量, 月电量,年电量)
    AS 
        select sname,
               sum(decode(trucn(sdate),trunc(sysdate),sdl,0)) day_dl, 
               sum(decode(to_char(sdate,'yyyymm'),to_char(sysdate,'yyyymm'),sdl,0)) month_dl, 
               sum(decode(to_char(sdate,'yyyy'),to_char(sysdate,'yyyy'),sdl,0)) year_dl 
           from a 
           group by sname
      

  3.   

    上面有个trunc少写了个C
    其实 下面用的to_char,也可以用trunc
    select trunc(sysdate,'MM') from dual
    结果
    2008/5/1
    select trunc(sysdate,'YYYY') from dual
    结果
    2008/1/1
    CREATE OR REPLACE FORCE VIEW view_table(单位, 日电量, 月电量,年电量)
    AS 
        select sname,
               sum(decode(trucnc(sdate),trunc(sysdate),sdl,0)) day_dl, 
               sum(decode(to_char(sdate,'yyyymm'),to_char(sysdate,'yyyymm'),sdl,0)) month_dl, 
               sum(decode(to_char(sdate,'yyyy'),to_char(sysdate,'yyyy'),sdl,0)) year_dl 
           from a 
           group by sname
      

  4.   

    我和不太明白你写的例子,慢慢研究,我写了一个也成功了,不过效率不高。。
    create or replace view v_dltj asselect name,
    (
      select nvl(dliang,0) from hdbalanceddjh 
      where to_char(hddate ,'yyyy-mm-dd')=to_char((sysdate-1),'yyyy-mm-dd')
      and a.name = name
    ) as day,
    (
      select sum(nvl(dliang,0)) from hdbalanceddjh 
      where to_char(hddate ,'yyyy-mm')=to_char((sysdate-1),'yyyy-mm')
      and a.name = name
    ) as month,
    (
      select sum(nvl(dliang,0)) from hdbalanceddjh 
      where to_char(hddate ,'yyyy')=to_char((sysdate-1),'yyyy')
      and a.name = name
    ) as year
    from hdbalanceddjh a
    where name in ('三峡','葛洲坝','隔河岩','丹江','阳逻三期','水布垭','襄樊','荆门','姚孟','姚孟二厂','沁北','邙山','三门峡','多宝山','丰鹤','周湾','五强溪','三板溪','湘潭','金竹山','丰城','黄金埠','二滩')
    group by name
      

  5.   

    解释一下这句话好吗,
    sum(decode(to_char(sdate,'yyyymm'),to_char(sysdate,'yyyymm'),sdl,0)) month_dl, 
      

  6.   

    decode
    判断条件 to_char(sdate,'yyyymm') 每条纪录取到月
    如果=to_char(sysdate,'yyyymm') 当前月,输出sdl
    默认(即不等于),输出0外面再用sum+一下,就是当月的汇总
      

  7.   

    2008-01-02                 三峡                   20 
    2008-01-02                 三峡                    30 
    2008-04-03                 三峡                    15 
    2008-04-04                 三峡                    24 
    取你这段数据,来做演示,假设现在日期为4月4日
    SUM以前用decode产生的select  日期,地区,
               decode(trucnc(sdate),trunc(sysdate),sdl,0) 日, 
               decode(to_char(sdate,'yyyymm'),to_char(sysdate,'yyyymm'),sdl,0) 月, 
               decode(to_char(sdate,'yyyy'),to_char(sysdate,'yyyy'),sdl,0) 年
           from a 日期                            地区   日  月  年
    2008-01-02                 三峡     0  0  20  日不等于当前日,输出0,月不等于,输出0,年等于,输出20
    2008-01-02                 三峡     0  0  30  日不等于当前日,输出0,月不等于,输出0,年等于,输出30 
    2008-04-03                 三峡     0  15  15 日不等于当前日,输出0,月等于,输出15,年等于,输出15 
    2008-04-04                 三峡     24 24  24 日等于当前日,输出24,月等于,输出24,年等于,输出24 然后再SUM一下,日就是24,月就是39,年就是89