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语句如何写?谢谢

解决方案 »

  1.   

    create table A
    (
       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
      

  2.   

    select 
    (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(所属县)]
      

  3.   

    select aa.[lx_name],aa.[town_name],isnull(bb.[统计],0) as [统计]
    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]
      

  4.   

    declare @a table(lx_no int,lx_name varchar(20))
    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
    */