select m.spbs
--    ,sum(m.xssl) 
      ,(select sum(xssl) 
         from jcdms_lsxsqdb 
         where spbs = m.spbs
               and 
               trunc(xssj) <= to_date('2003-05-15','yyyy-mm-dd')
        )
      ,max(sm)
from jcdms_lsxsqdb m,bm_jbxxk j 
where trunc(xssj) >= to_date('2003-05-10','yyyy-mm-dd') 
      and trunc(xssj) <= to_date('2003-05-15','yyyy-mm-dd') 
      and m.spbs = j.spbs 
      and rownum <= 5 
group by m.spbs      
order by sum(m.xssl) desc

解决方案 »

  1.   

    sql server的会,oracle的只有up
      

  2.   

    原来的代码总体上来说是对的,只是程序员未理解PL/SQL中的"rownum<=5"的真正含义,这跟T-SQL中的"Top 5"不是一个概念!
    改成如下语句就OK了:select * From (
    select m.spbs,sum(m.xssl),sm from jcdms_lsxsqdb m,bm_jbxxk j where trunc(xssj)>=to_date('2003-05-10','yyyy-mm-dd') and trunc(xssj)<=to_date('2003-05-15','yyyy-mm-dd') and m.spbs=j.spbs order by sum(xssl) desc
    ) temp Where rownum<=5
      

  3.   

    rownum 是oracel支持的一个函数,得到记录的记录号
      

  4.   

    rownum是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数。
      

  5.   

    XSSL  NUMBER(10,2)    销售数量
    trunc(xssj)>=to_date('2003-05-10','yyyy-mm-dd')看不懂,自相矛盾
      

  6.   

    select a.SM, b.XSL, a.DJ 
    from BM_JBXXK a,
             (selec c.SPBS, sum(c.XSSL) XSL
              from JCDMS_LSXSQDB c
              where rownum <= 5 
                  and trunc(xssj)>=to_date('2003-05-10','yyyy-mm-dd') 
                  and trunc(xssj)<=to_date('2003-05-15','yyyy-mm-dd')
              group by SPBS
              order by sum(c.XSSL) desc
             )b
    where a.SPBS = b.SPBS
    如果出现了调试不能通过的现象,那么是字符敲错了。我机器上没有Oracle。
    你给我说,我可以帮你找出错误的地方。
      

  7.   

    playyuer(双规干部)写的代码的效率好像不是很高,
      

  8.   

    select m.spbs
          ,max(sm)
          ,(select sum(xssl) 
             from jcdms_lsxsqdb 
             where spbs = m.spbs
                   and 
                   trunc(xssj) <= to_date('2003-05-15','yyyy-mm-dd')
            )
    from jcdms_lsxsqdb m,bm_jbxxk j 
    where  m.spbs = j.spbs
           and    
           m.spbs in (select SPBS 
                      from (select SPBS 
                              from JCDMS_LSXSQDB
                             where rownum <= 5 
                                   and trunc(xssj) >= to_date('2003-05-10','yyyy-mm-dd') 
                                   and trunc(xssj) <= to_date('2003-05-15','yyyy-mm-dd')
                          group by SPBS
                          order by sum(XSSL) desc
                           ) T
                    )
    group by m.spbs      
     hxfjb(New人) :select a.spbs
          ,max(a.SM)
          ,(select sum(xssl) 
             from jcdms_lsxsqdb 
             where spbs = a.spbs
                   and 
                   trunc(xssj) <= to_date('2003-05-15','yyyy-mm-dd')
            )
    from BM_JBXXK a,
             (select c.SPBS, sum(c.XSSL) XSL
              from JCDMS_LSXSQDB c
              where rownum <= 5 
                  and trunc(xssj)>=to_date('2003-05-10','yyyy-mm-dd') 
                  and trunc(xssj)<=to_date('2003-05-15','yyyy-mm-dd')
              group by SPBS
              order by sum(c.XSSL) desc
             )b
    where a.SPBS = b.SPBS
    group by a.spbs
      

  9.   

    经过测试应该没问题select * from (select  spbs,sum(xssl) as XSSL ,(select dj from bm_jbxxk where spbs=jcdms_lsxsqdb.spbs) as dj,
    (select sm from bm_jbxxk where spbs=jcdms_lsxsqdb.spbs) as sm
    from jcdms_lsxsqdb
    where trunc(xssj)>=to_date('2003-05-10','yyyy-mm-dd') and trunc(xssj)<=to_date('2003-05-15','yyyy-mm-dd') 
    Group by spbs  order by xssl desc)a  where rownum<=5 order by xssl desc
      

  10.   

    To IStephen (风的自由) :
    你快测试!
      

  11.   

    To IStephen (风的自由) :
    你干嘛呢?
      

  12.   

    JCDMS_LSXSQDB表应该有个销售日期字段
      

  13.   

    SELECT TOP 5 SPBS,SM,SUM(XSJE) AS XSJE
     (SELECT J.SPBS, B.SM, J.XSSL*B.DJ AS XSJE
        FROM JCDMS_LSXSQDB J LEFT BM_JBXXK B 
          ON J.SPBS=B.SPBS
       WHERE XS_DATE>=DATEADD(DAY,-7,GETDATE())) MyView
    GROUP BY SPBS, SM
    ORDER BY SPBS, SM DESC其中XS_DATE为销售日期,你的表中没写。
      

  14.   

    回复人: IStephen(风的自由) ( ) 信誉:100  2004-07-27 02:20:00  得分: 0  
     
     
       不好意思,贴子上的问题已经解决,是坛上的一位高手,东西也已经送给他了。
      
     
    以后还要请你注意,不要到处乱承诺,在一个地方许了,就应该在那个地方等待。
    这里的高手不会在乎你的那点东东,但我看了不服气!
      

  15.   

    对不起我是新来的,具体给分什么的我也不懂,我在ASP区跟SQL区各发了一贴,解决问题的是通过QQ跟我联系的----在他之前,回贴的朋友没有一个的方法是可行的,所以我把东西给他了,如果我做的做法有误,请原谅。