a表证件类型表二个字段lx_no,lx_name
a表数据为 1,B超许可证
2,超声波许可证
3,红外线许可证
b表县区表字段为town_no,town_name
1,海淀区
2,朝阳区
3,东城区
c表单位表字段如下,union_no,union_name,union_city(所属市),union_town(所属县),lx_no
1,北京一院,北京市,海淀区,1
2,北京二院,北京市,朝阳区,2
按县区统计时某证件的单位数量,得到下面的结果
B超许可证 海淀区 1
朝阳区 0
东城区 0
超声波许可证 海淀区 0
朝阳区 1
东城区 0
红外线许可证 海淀区 0
朝阳区 0
东城区 0
统计的sql语句如何写?谢谢
a表数据为 1,B超许可证
2,超声波许可证
3,红外线许可证
b表县区表字段为town_no,town_name
1,海淀区
2,朝阳区
3,东城区
c表单位表字段如下,union_no,union_name,union_city(所属市),union_town(所属县),lx_no
1,北京一院,北京市,海淀区,1
2,北京二院,北京市,朝阳区,2
按县区统计时某证件的单位数量,得到下面的结果
B超许可证 海淀区 1
朝阳区 0
东城区 0
超声波许可证 海淀区 0
朝阳区 1
东城区 0
红外线许可证 海淀区 0
朝阳区 0
东城区 0
统计的sql语句如何写?谢谢
(
lx_no int,
lx_name varchar(50)
)create table B
(
town_no int,
town_name varchar(50)
)create table c
(
union_no int,
union_name varchar(50),
union_city varchar(50),
union_town varchar(50),
lx_no int
)
insert A select 1,'B超许可证'
insert A select 2,'超声波许可证'
insert A select 3,'红外线许可证'
insert B select 1,'海淀区'
insert B select 2,'朝阳区'
insert B select 3,'东城区'insert C select 1,'北京一院','北京市','海淀区',1
insert C select 2,'北京二院','北京市','朝阳区',2select case when A.town_name='海淀区' then lx_name1 else '' end as lx_name,town_name,num from
(select T.lx_name as lx_name1,T.town_name, (select count(1) from C where union_town=T.town_name and lx_no=T.lx_no) as num
from
(select A.*,B.* from A,B) T) A
order by A.lx_name1
(select [lx_name] from [a表] where [lx_no]=c.[lx_no]) as [证件类型],
(c.[union_town(所属县)] /*select [town_name] from [b表] where [town_no]=c.??*/) as [县区],
count(1) as [统计]
from
[c表] c
group by [lx_no],[union_town(所属县)]
from (
select
a.[lx_no],a.[lx_name],b.[town_name]
from
[a表] a
cross join
[b表] b
) aa
left join
(
select
c.[lx_no],
c.[union_town(所属县)] as [town_name],
count(1) as [统计]
from
[c表] c
group by
[lx_no],[union_town(所属县)]
) bb
on aa.[lx_no]=bb.[lx_no] and aa.[town_name]=bb.[town_name]
insert into @a select 1,'B超许可证'
insert into @a select 2,'超声波许可证'
insert into @a select 3,'红外线许可证'
declare @b table(town_no int,town_name varchar(20))
insert into @b select 1,'海淀区'
insert into @b select 2,'朝阳区'
insert into @b select 3,'东城区'
declare @c table(union_no int,union_name varchar(20),union_city varchar(20),union_town varchar(20),lx_no int)
insert into @c select 1,'北京一院','北京市','海淀区',1
insert into @c select 2,'北京二院','北京市','朝阳区',2select a.lx_name,b.town_name,count(c.union_no) as num from @a a cross join @b b left join @c c on a.lx_no=c.lx_no and b.town_name=c.union_town
group by a.lx_no,a.lx_name,b.town_no,b.town_name order by a.lx_no,b.town_no/*
lx_name town_name num
-------------------- -------------------- -----------
B超许可证 海淀区 1
B超许可证 朝阳区 0
B超许可证 东城区 0
超声波许可证 海淀区 0
超声波许可证 朝阳区 1
超声波许可证 东城区 0
红外线许可证 海淀区 0
红外线许可证 朝阳区 0
红外线许可证 东城区 0
*/