乡镇代码  统计单位         面积
1   1 0.9         1乡镇合计
1   1 0.8         1乡镇      1村
1   2 0.1         1乡镇     2村
2          2               0.7         2乡镇  合计     
我想通过下面这个表(地名表)生成新表
 乡镇名      村名    乡镇代码      村代码
   公岭       岭头     1             1
   公岭        岭南    1             2
   番于        塘下    2             1
   番于        上头    2             2
把上表的统计单位乡镇代码,和村代码改为村名,乡镇名
统计单位        面积
公岭            0.9      --合计
岭头            0.8      --分1村
岭南            0.1      --分2村
番于            0.7      --合计

解决方案 »

  1.   

    create table A(乡镇代码 int, 统计单位 int,面积 decimal(18,1))
    insert into A values(1,   1,0.9)
    insert into A values(1,   1,0.8)
    insert into A values(1,   2,0.1)
    insert into A values(2,   2,0.7)
    create table B(乡镇名 varchar(10),村名 varchar(10),乡镇代码 int, 村代码 int)
    insert into B values('公岭',       '岭头',     1,             1)
    insert into B values('公岭',        '岭南',    1,             2)
    insert into B values('番于',        '塘下',    2,             1)
    insert into B values('番于',        '上头',    2,             2)
    go
    select B.乡镇名,max(面积) 面积 from A,B where A.乡镇代码 = B.乡镇代码 group by B.乡镇名
    union all
    select B.村名,A.面积 from A,B where A.乡镇代码 = B.乡镇代码 and A.统计单位 = B.村代码 
    and cast(B.乡镇代码 as varchar) + cast(A.面积 as varchar) not in 
    (select cast(乡镇代码 as varchar) + cast(面积 as varchar) from
    (select 乡镇代码,max(面积) 面积 from A group by 乡镇代码) t)
    order by 乡镇名drop table A,B/*
    乡镇名        面积                   
    ---------- -------------------- 
    番于         .7
    公岭         .9
    岭南         .1
    岭头         .8
    (所影响的行数为 4 行)
    */