表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
朝阳区 小三 400create 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=1insert into @t
select *,@i
from A
where 部門名稱=@strwhile @@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
endselect 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 朝阳区 北京表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
朝阳区 小三 400create 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=1insert into @t
select *,@i
from A
where 部門名稱=@strwhile @@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
endselect 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 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 gocreate function dbo.aa(@str varchar(10))
returns @t table (部門ID int,部門名稱 varchar(100),上級部門 varchar(100),level int)
as
begin
declare @i int
set @i=1insert into @t
select *,@i
from A
where 部門名稱=@strwhile @@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
go/********这里加一个go*****************************************************/
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.薪水)
go
drop table a,b,c
drop function dbo.aa
---------------------------------------------------------------------------------------------------- ---------- -----------
江西 張三 500
進賢 張三 500
南昌 張三 500 sum
===========
1500
mengmou()mengmou() 应该符合你的意思
1 北京 中国 亚洲 世界
2 海淀区 北京 中国 亚洲
3 朝阳区 北京 中国 亚洲-------------
不知樓主看過BOM 表沒有,如果是BOM的話,會這樣建表
ID PRARENT CHILD
1 世界 亚洲
2 亚洲 中国
3 中国 北京
4 中国 江西
5 北京 海淀区
6 北京 朝阳区
7 江西 南昌
8 南昌 進賢
9 進賢 xx應該是這種表結構才合理,處理數據比較方便,計算成本,計算物料需求也好處理
如果這個層次達到几十層,你這樣寫不是要多達几十個字段?
今天在等等看看还有什么好方法没有,明天再结
部门ID 部门名称 上级部门 頂級部門 頂頂級部門
--------------------
樓主的表結構就是這樣的嗎?我想看下你的真實數據