怎么可能,刚才是跨表操作,我现在消除了跨表操作,而且将统计数据集合了起来,(id都成主键了)
sigh
不要管开头的东西了,那个表结构有点问题,帮忙的兄弟们仔细想想吧。
我实在是没好的办法解决它了

解决方案 »

  1.   

    我的观点:id 纯粹是多余,其实,你在sub表里以subid为主键,包含issetdaily里只要subid,numA(可能还有日期),以subid为外键,问题好解决多了,也更合理。对于你的“-*”
    可以这样啊  like subid||'-%'
    就不会统计1022了。祝你成功!
      

  2.   

    大哥,数据库表不是我设计的啊,说改就改?而且系统n大,影响大多,所以通过改数据库表是行不通的。另外,like subid||'-%'好像不行,我试过了,是不是'-'符号的问题?
      

  3.   

    这样试试:
    select id,sum(numa),subid,isset from daily where isset=1 group by id,subid,isset
    union
    select a.id,sum(b.numa),a.subid,a.isset from daily a,(select numa,subid from daily) b where a.isset=0  and (a.subid=b.subid or b.subid like a.subid || '-%') group by a.id,a.subid,a.isset
      

  4.   

    刚才两个表的这样应该可以:
    SQL> select * from sub;SUBID                     ISSET ID
    -------------------- ---------- ----------
    101                           1 11
    102                           0 12
    102-101                       1 13
    102-102                       0 14
    102-102-101                   1 15
    102-102-102                   1 16
    1022                          1 177 rows selected.SQL> select * from daily;SUBID                      NUMA
    -------------------- ----------
    11                            1
    12                            2
    13                            3
    14                            4
    11                            5
    15                            6
    13                            7
    15                            8
    17                            99 rows selected.SQL> select a.subid,sum(numa),isset from sub a,daily b where a.id=b.subid and a.isset=1 group by a.s
    ubid,isset
      2  union all
      3  select a.subid,sum(b.numa),a.isset from sub a,(select c.subid as subid,d.numa as numa from sub 
    c,daily d where c.id=d.subid ) b where a.isset=0 and (b.subid like a.subid || '-%' or b.subid=a.subi
    d) group by a.subid,a.isset;SUBID                 SUM(NUMA)      ISSET
    -------------------- ---------- ----------
    101                           6          1
    102-101                      10          1
    102-102-101                  14          1
    1022                          9          1
    102                          30          0
    102-102                      18          06 rows selected.
      

  5.   

    zhaoyongzhu(zhaoyongzhu) 的solution应该可以的。
    以下也供你参考SQL> select ascii('-') from dual;ASCII('-')
    ----------
            45SQL> select chr(45) from dual;C
    -
    -SQL>
      

  6.   

    select id,
           case when isset='1' then NumA
             else (select sum(NumA) from daily b 
                     where b.subid=a.subid 
                        or b.subid like a.subid||'-%') end as Num,
           subid,isset
      from daily a;
      

  7.   

    select id,
           case when isset='1' then NumA
             else (select sum(NumA) from daily b 
                     where b.subid=a.subid 
                        or b.subid like trim(a.subid)||'-%') end as Num,
           subid,isset
      from daily a;
      

  8.   

    先Update 后Select, 搞那么复杂干什么?
    ================================================================CSDN 论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!★  浏览帖子速度极快![建议系统使用ie5.5以上]。 ★  多种帖子实现界面。 
    ★  保存帖子到本地[html格式]★  监视您关注帖子的回复更新。
    ★  可以直接发贴、回复帖子★  采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录! 
    ★  支持在线检测程序升级情况,可及时获得程序更新的信息。★★ 签名  ●  
         可以在您的每个帖子的后面自动加上一个自己设计的签名哟。Http://www.ChinaOK.net/csdn/csdn.zip
    Http://www.ChinaOK.net/csdn/csdn.rar
    Http://www.ChinaOK.net/csdn/csdn.exe    [自解压]
      

  9.   

    select a.id,a.subid,a.isset,sum(b.numa) from test1 a,test1 b 
    where (b.subid like a.subid||'-%' or a.subid=b.subid) and a.isset=0 group by a.id,a.subid,a.isset
    union
    select id,subid,isset,numa from test1 where isset=1
      

  10.   

    tlbbqf(为伊消的人憔悴) 是对的.
      

  11.   

    Create View to simply your question . If you try to write complicate SQL ( ofcourse there is always a way to write it ) , It will bring you a lot of problem in future (like maintainence , performance etc.)