select DISTINCT  * from (select bm,
(select sl from TR where TR.bm=T.bm and T.bs='R' and month(rq)=1) as r1,
(select sl from TC where TC.bm=T.bm and T.bs='C' and month(rq)=1) as C1,
(select sl from TR where TR.bm=T.bm and T.bs='R' and month(rq)=2) as r2,
(select sl from TC where TC.bm=T.bm and T.bs='C' and month(rq)=2) as C2
from 
(select bm,'R' as bs,sl,rq from TR
union 
select bm,'C' as bs ,sl,rq from TC) T) TZ

解决方案 »

  1.   

    select sum(case datepart(month,rq) when 1 then sl else 0 end) as r1,
           sum(case datepart(month,rq) when 2 then sl else 0 end) as r2
    from a
    group by bm
    cross join
    select sum(case datepart(month,rq) when 1 then sl else 0 end) as c1,
           sum(case datepart(month,rq) when 2 then sl else 0 end) as c2
    from b
    group by bm
      

  2.   

    1:首先汇总不同的BM
    select bm from a group by bm
    2:计算入出库
    select sum(sl) from a where convert(char,rq,102)>='2005.01.01' and convert(char,rq,102)<=2005.01.31'' and bm=''
    select sum(sl) from b where convert(char,rq,102)>='2005.01.01' and convert(char,rq,102)<=2005.01.31'' and bm=''
        呵呵。。初学SQL,就我目前的水平只能这样写了。后面得继续将语法复制,粘贴,将日期从1月到12月分类。希望是抛砖引玉。希望高手修改,修改!
          
      

  3.   


    select a.id,a.bm,
          sum(case when right(rq)=1 then a.sl else  0 end) as r1,   
          sum(case when right(rq)=1 then b.sl else  0 end) as c1
          sum(case when right(rq)=2 then a.sl else  0 end) as r2
          sum(case when right(rq)=2 then b.sl else  0 end) as c2
             
    from (select  id,bm,sum(sl) as sl ,convert (varchar(6),rq,112)as rq from a group by id,bm,convert (varchar(6),rq,112)) a  
    all join (select  id,bm,sum(sl)as sl ,convert (varchar(6),rq,112)  as rq from a group by id,bm,convert (varchar(6),rq,112)) b 
    on a.id=b.id and a.bm=b.bm and a.rq=b.rq
    group by a.id,b.bm
      

  4.   

    对不起,有小错误改下select c.id,c.bm,
          sum(case when right((rq),1)=1 then c.sl else  0 end) as r1,   
          sum(case when right((rq),1)=1 then d.sl else  0 end) as c1,
          sum(case when right((rq),1)=2 then c.sl else  0 end) as r2,
          sum(case when right((rq),1)=2 then d.sl else  0 end) as c2
             
    from (select  id,bm,sum(sl) as sl ,convert (varchar(6),rq,112)  as rq from a  group by id,bm,convert (varchar(6),rq,112)) c 
     join (select  id,bm,sum(sl)as sl ,convert (varchar(6),rq,112)  as rq from a group by id,bm,convert (varchar(6),rq,112)) d
    on c.id=d.id and c.bm=d.bm and c.rq=d.rq
    group by c.id,d.bm
      

  5.   

    select DISTINCT  * from (select bm,
    (select sum(sl) from TR where TR.bm=T.bm and T.bs='R' and month(rq)=1) as r1,
    (select sum(sl) from TC where TC.bm=T.bm and T.bs='C' and month(rq)=1) as C1,
    (select sum(sl) from TR where TR.bm=T.bm and T.bs='R' and month(rq)=2) as r2,
    (select sum(sl) from TC where TC.bm=T.bm and T.bs='C' and month(rq)=2) as C2
    from 
    (select bm,'R' as bs,sl,rq from TR
    union 
    select bm,'C' as bs ,sl,rq from TC) T) TZ
      

  6.   

    可能在这里提这个问题有些不妥,我用的是sybase,这个版本不支持select * from (select * from a) t这种写法。不知能否实现?拜托各位大侠了。谢谢!