表a(dw,sl,bz)单位代码,数量,标志
表b(dw,mc)单位代码,名称
a表中数据如下
dw sl bz
1001 1 0
1002 25 2
1003 5 1
1001 20 1
1002 10 3
b表中数据如下
dw mc
1001 公司a
1002 公司b
1003 公司c
1004 公司d
1005 公司e
现在想汇总a表中的数据实现下面内容.
dw sl tzs(bz=0) zs(bz=1) jzzs(bz=2) jjbg(bz=3) 
公司a 21 1 1 0 0
公司b 35 0 0 1 1
公司c 5 0 1 0 0
公司d 0 0 0 0 0
公司e 0 0 0 0 0用一个sql语句怎么写出来?

解决方案 »

  1.   

    MARK下,要下班了明天没解决就写看看
      

  2.   

    tzs(bz=0) zs(bz=1) jzzs(bz=2) jjbg(bz=3)  是什么意思 没看懂
      

  3.   


    --显示不同条件的分组结果记录集
    --建立测试环境
    create table #a(dw varchar(20),sl int,bz int)
    insert into #a
    select '1001',1,0 union all
    select '1002',25,2 union all
    select '1003',5,1 union all
    select '1001',20,1 union all
    select '1002',10,3create table #b(dw varchar(20),mc nvarchar(100))
    insert into #b
    select '1001','公司a' union all
    select '1002','公司b' union all
    select '1003','公司c' union all
    select '1004','公司d' union all
    select '1005','公司e'
    --测试
    select B.mc
    ,isnull((select sum(sl) tzs from #a A where A.dw=B.dw group by dw),0) 'sl'
    ,isnull((select sum(sl) tzs from #a A where bz=0 and A.dw=B.dw group by dw),0) 'tzs(bz=0)'
    ,isnull((select sum(sl) tzs from #a A where bz=1 and A.dw=B.dw group by dw),0) 'tzs(bz=1)'
    ,isnull((select sum(sl) tzs from #a A where bz=2 and A.dw=B.dw group by dw),0) 'tzs(bz=2)'
    ,isnull((select sum(sl) tzs from #a A where bz=3 and A.dw=B.dw group by dw),0) 'tzs(bz=3)'
    from #b B
    --显示结果
    /*
    dw sl tzs(bz=0) zs(bz=1) jzzs(bz=2) jjbg(bz=3) 
    公司a 21 1 1 0 0
    公司b 35 0 0 1 1
    公司c 5 0 1 0 0
    公司d 0 0 0 0 0
    公司e 0 0 0 0 0
    */
    --删除测试环境
    drop table #a
    drop table #b
      

  4.   

    Hopewell_Go(好的在后頭﹗希望更好﹗﹗) 大哥,实在是太感谢你啦!!!!!!
    能不能问一句,你上面那个建立测试环境,建了两个表#a,#b,我在数据库里怎么没找到啊?
    你建到哪里去了?
      

  5.   

    那两个是临时表来地.
    select dw,max(sl),aa=sum(case when bz=0 then 1 else 0 end) ,
                 bb=sum(case when bz=1 then 1 else 0 end),
                 cc=sum(case when bz=2 then 1 else 0 end ),
                 dd=sum(case when bz=3 then 1 else 0 end ) from a  group by dw
      

  6.   

    mysummer2003,你这样写只能汇总出a表中存在的单位,我想要得是把所有的单位都汇总出来,如果a表中没有,则显示汇总结果为0
    Hopewell_Go 大哥的方法是可行的,我试过了.真好
      

  7.   

    不好意思,搞错.
    select  #b.mc,t.sl,t.aa,t.bb,t.cc,t.dd from #b  left join 
    (select dw,max(sl),aa=sum(case when bz=0 then 1 else 0 end) ,
                 bb=sum(case when bz=1 then 1 else 0 end),
                 cc=sum(case when bz=2 then 1 else 0 end ),
                 dd=sum(case when bz=3 then 1 else 0 end )  from #a group by dw)t on t.dw=#b.dw
      

  8.   

    不好意思,又错了 .呵呵 
    select  #b.mc,isnull(t.o,0),isnull(t.aa,0),isnull(t.bb,0),isnull(t.cc,0),isnull(t.dd,0) from #b  left join 
    (select dw,max(sl) o,aa=sum(case when bz=0 then 1 else 0 end) ,
                 bb=sum(case when bz=1 then 1 else 0 end),
                 cc=sum(case when bz=2 then 1 else 0 end ),
                 dd=sum(case when bz=3 then 1 else 0 end )  from #a group by dw)t on t.dw=#b.dw
      

  9.   

    select  #b.mc,isnull(t.o,0),isnull(t.aa,0),isnull(t.bb,0),isnull(t.cc,0),isnull(t.dd,0) from #b  left join 
    (select dw,sum(sl) o,aa=sum(case when bz=0 then 1 else 0 end) ,
                 bb=sum(case when bz=1 then 1 else 0 end),
                 cc=sum(case when bz=2 then 1 else 0 end ),
                 dd=sum(case when bz=3 then 1 else 0 end )  from #a group by dw)t on t.dw=#b.dw
      

  10.   

    这回都没问题了,你们怎么学的Sql语句啊,我有时候很多复杂的查询都写不出来,有没有什么经验指点一下我啊.