SELECT SUBSTRING(clbm) AS 类别,sum(dj * yesl) AS 合计金额 
       FROM cl_mxz
       WHERE nf=2003 AND yf=5
       GROUP BY SUBSTRING(clbm)

解决方案 »

  1.   

    to: LJYWZ(罗敬业) 
       余额数量为该材料发生进或出帐后的库存数量(某月的最大日期数(rr)的余额数量即为该材料该月的余额数量 )。
    sum(dj * yesl) 不对,我要选出该月的最后一次(即最大日期数)帐本发生的余额数量.
      

  2.   

    SELECT SUBSTRING(clbm,1,2) AS 类别,sum(dj * yesl) AS 合计金额 
           FROM cl_mxz
           WHERE nf=2003 AND yf=5
           and rr=(select max(rr) from cl_mxz where nf=2003 AND yf=5)
           GROUP BY SUBSTRING(clbm,1,2)
      

  3.   

    select left(clbm,2) 类别,sum(dj*yesl) 合计金额 from cl_mxz where nf=2003 and yf=5 group by left(clbm,2)
      

  4.   

    select 类别,sum(合计金额) 合计金额 from(select left(clbm,2) 类别,dj*(select top 1 yesl from cl_mxz where nf=aa.nf and yf=aa.yf and clbm=aa.clbm order by rr desc) 合计金额 from cl_mxz aa where nf=2003 and yf=5 ) tem group by 类别
      

  5.   

    --测试:
    declare @cl_mxz table (lsh int,clbm varchar(10), nf int,yf int,rr int,dj int,yesl  int)
    insert @cl_mxz values(1,      '01*****' , 2003  ,5,   1   ,  9 ,    10)
    insert @cl_mxz values(2 ,     '03*****'  ,2003  ,5 ,  1  ,   9  ,   5)
    insert @cl_mxz values(3  ,    '02*****' , 2003 , 5  , 3 ,    16  ,  2)
    insert @cl_mxz values(4   ,   '01*****'  ,2003,  5   ,4,     8,  19)select 类别,sum(合计金额) 合计金额 from(
    select left(clbm,2) 类别,dj*(select top 1 yesl from @cl_mxz where nf=aa.nf and yf=aa.yf and clbm=aa.clbm order by rr desc) 合计金额 from @cl_mxz aa where nf=2003 and yf=5 ) tem group by 类别
      

  6.   

    SELECT SUBSTRING(clbm,1,2) AS 类别,sum(dj * yesl) AS 合计金额 
           FROM cl_mxz
           WHERE nf=2003 AND yf=5
           and rr=(select max(rr) from cl_mxz  a where  a.SUBSTRING(clbm,1,2)=cl_mxz.SUBSTRING(clbm,1,2)
     )
           GROUP BY SUBSTRING(clbm,1,2)
      

  7.   


    SELECT SUBSTRING(clbm,1,2) AS 类别,sum(dj * yesl) AS 合计金额 
           FROM cl_mxz
           WHERE nf=2003 AND yf=5
          and rr=(select max(rr) from cl_mxz  a where  SUBSTRING(a.clbm,1,2)=SUBSTRING(cl_mxz.clbm,1,2) )
           GROUP BY SUBSTRING(clbm,1,2)
      

  8.   

    衷心感谢大力以及happydreamer(偶很菜)的帮助,
    大力的我已试过,可以很快得出结果,由于数据量比较大,结果还没来得急验证,
    happydreamer(偶很菜)的方法也可以得出结果,但是间要长一些(大概需要几分锺),选出的类别少了部分,得出的合计金额似乎偏少,有待验证.
      

  9.   

    如果指定年月:
    select 类别,yesl*dj as 合计金额 from 
    (select top 1 left(clbm,2) as 类别,dj,yesl from cl_mxz 
    where nf=2003 and yf=5
    order by rr desc)如果要返回所有年月:
    select 类别,yesl*dj as 合计金额 from 
    (select left(clbm,2) as 类别,dj,yesl from cl_mxz 
    where lsh in 
    (select top 1 lsh from cl_mxz group by left(clbm,2),nf,yf order by rr desc)
    order by rr desc)