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

fa_ge(鶴嘯九天)清进解决方案

2012-02-14 
fa_ge(鶴嘯九天)清进表A(部门)--字段部门ID部门名称上级部门1北京中国2海淀区北京3朝阳区北京表B(人员)--

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

應該是這種表結構才合理,處理數據比較方便,計算成本,計算物料需求也好處理
如果這個層次達到几十層,你這樣寫不是要多達几十個字段?

热点排行