首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

有高手吗,一个动态sql有关问题

2012-03-21 
有高手吗,一个动态sql问题表A(部门)--字段部门ID部门名称上级部门1北京中国2海淀区北京3朝阳区北京表B(人

有高手吗,一个动态sql问题
表A(部门)--字段
部门ID         部门名称       上级部门
1                       北京               中国
2                     海淀区             北京
3                     朝阳区             北京

表B(人员)--字段
人员ID           人员名             部门ID
4                       小一                   1
5                       小二                   2
6                       小三                   3

表C(薪水)--字段
薪水ID             薪水             人员ID       部门ID
1                       200                     4                 1
2                       300                     5                 2
3                       400                     6                 3

问题:   当我在一个文本框里输入北京的时候出来的效果为---
北京           小一           200
海淀区       小二           300
朝阳区       小三           400

create   table   A
(部門ID   int,       部門名稱       varchar(10),   上級部門   varchar(10))
insert   into   A
SELECT   1,                     '北京 ',               '中國 '     UNION   ALL
SELECT   2,                     '海淀區 ',             '北京 '   UNION   ALL
SELECT   3,                     '朝陽區 ',             '北京 '   UNION   ALL
SELECT   4,                     '江西 '     ,             '中國 '   union   all
select   5,                     '南昌 ',                 '江西 '   union   all
select   6,                     '進賢 ',                 '南昌 '
create   table   B
(人員ID   int,         人員名   varchar(10),             部門ID   int)
insert   into   B
select   4,                       '小一 ',                   1   union   all


select   5,                       '小二 ',                   2   union   all
select   6,                       '小三 ',                   3   union   all
select   7,                       '張三 ',                   4   union   all
select   8,                       '張三 ',                   5   union   all
select   9,                       '張三 ',                   6          

create   table   C
(薪水ID   int,             薪水   int,             人員ID   int,     部門ID   int)
insert   into   C
select   1,                       200,                     4,                 1   union   all
select   2,                       300,                     5,                 2   union   all
select   3,                       400,                     6,                 3   union   all
select   4,                       500,                     7,                 4   union   all
select   5,                       500,                     8,                 5   union   all
select   6,                       500,                     9,                 6      


create   function   dbo.aa(@str   varchar(10))
returns   @t   table   (部門ID   int,部門名稱   varchar(100),上級部門   varchar(100),level   int)
as  
begin
declare   @i   int  
set   @i=1

insert   into   @t
select   *,@i  
from     A    
where   部門名稱=@str

while   @@rowcount> 0  
begin
set   @i=@i+1
insert   into   @t
select   t.*,@i   from   A   t   LEFT   JOIN   @t   b   on   t.上級部門=b.部門名稱
where   b.level=@i-1
end    

return
end

select   t1.部門名稱   ,t2.人員名,t3.薪水
from     dbo.aa( '江西 ')t1   left   join   B   t2   on   t1.部門ID=t2.部門ID


                                              left   join   C   t3   on   t2.部門ID=t3.部門ID  
                                                                          and   t2.人員ID=t3.人員ID
order   by   t1.部門名稱
compute   sum(t3.薪水)
如果上级部门不能确定是多少个应该怎么写

[解决办法]
我記得這個是我寫的,不知你現要做什么

热点排行
Bad Request.