表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语句怎么写出来?
表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语句怎么写出来?
--显示不同条件的分组结果记录集
--建立测试环境
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
能不能问一句,你上面那个建立测试环境,建了两个表#a,#b,我在数据库里怎么没找到啊?
你建到哪里去了?
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
Hopewell_Go 大哥的方法是可行的,我试过了.真好
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
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
(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