有高手吗,一个动态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.薪水)
如果上级部门不能确定是多少个应该怎么写
[解决办法]
我記得這個是我寫的,不知你現要做什么