日期:2014-05-19  浏览次数:20472 次

高分求一sql语句
表1   --政府机关
Viceid       keyid     parentid     电话     传真     办公时间
1                   31           -1               11           11           11
2                   32             1               22           22           22
3                   33             1               33           33           33
表2   --政府机关_组织机构
subdeptid     viceid   名称         职能
1                     1             组织部       111
2                     2             法制课       222
3                     3             政治部       333
4                     1             政治部       333
5                     1             法制课       222
表3   --主数据
keyid     city   name             address
31           北京   北京市公安局       8888
32           北京   朝阳区公安局       9999
33           北京   海淀区公安局       0000
其中表1   表2   viceid关联
        表1   表3   keyid关联
        表1   parentid是引用viceid,成树结构
结果:
北京市公安局
            组织部     111
            政治部     333
            法制课     222
    朝阳区公安局
            法制课     222
    海淀区公安局
            政治部       333
如果没有下属部门,只显示自己的组织机构。
如:北京市公安局下有各个区的公安局,市公安局有自己的组织机构,
        而区公安局也有自己的组织机构      


------解决方案--------------------
--测试环境
declare @table1 table
(
viceId int,
keyId int,
parentId int
)

declare @table2 table
(
stbdeptId int,
viceId int,
名称 varchar(50)
)

declare @table3 table
(
keyId int,
city varchar(20),
name varchar(50)
)

insert into @table1 values (1, 31, -1)
insert into @table1 values (2, 32, 1)
insert into @table1 values (3, 33, 1)

insert into @table2 values (1, 1, '组织部 ')
insert into @table2 values (2, 2, '法制课 ')
insert into @table2 values (3, 3, '政治部 ')
insert into @table2 values (4, 1, '政治部 ')
insert into @table2 values (5, 1, '法制课