fa_ge(鶴嘯九天)清进
表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.薪水)
这个确实是你写的,但是,有错
在关键字 'select ' 附近有语法错误。
[解决办法]
部门ID 部门名称 上级部门 顶级部门 顶顶级部门 ……
1 北京 中国 亚洲 世界
2 海淀区 北京 中国 亚洲
3 朝阳区 北京 中国 亚洲
-------------
不知樓主看過BOM 表沒有,如果是BOM的話,會這樣建表
ID PRARENT CHILD
1 世界 亚洲
2 亚洲 中国
3 中国 北京
4 中国 江西
5 北京 海淀区
6 北京 朝阳区
7 江西 南昌
8 南昌 進賢
9 進賢 xx
應該是這種表結構才合理,處理數據比較方便,計算成本,計算物料需求也好處理
如果這個層次達到几十層,你這樣寫不是要多達几十個字段?