表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' 附近有语法错误。

解决方案 »

  1.   

    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   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
      

  2.   

    部門名稱                                                                                                 人員名        薪水          
    ---------------------------------------------------------------------------------------------------- ---------- ----------- 
    江西                                                                                                   張三         500
    進賢                                                                                                   張三         500
    南昌                                                                                                   張三         500                                                                                                                sum
                                                                                                                    ===========
                                                                                                                    1500
      

  3.   

    有钱人 都发2个帖子送分-.-!!
    mengmou()mengmou() 应该符合你的意思 
      

  4.   

    fa_ge(鶴嘯九天)等着给你结分了
      

  5.   

    部门ID    部门名称   上级部门 顶级部门 顶顶级部门 ……
    1          北京        中国    亚洲     世界   
    2          海淀区      北京    中国     亚洲
    3          朝阳区      北京    中国     亚洲-------------
    不知樓主看過BOM 表沒有,如果是BOM的話,會這樣建表
    ID PRARENT   CHILD 
    1  世界       亚洲
    2  亚洲       中国
    3  中国       北京
    4  中国       江西 
    5  北京       海淀区
    6  北京       朝阳区
    7  江西       南昌
    8  南昌       進賢
    9  進賢       xx應該是這種表結構才合理,處理數據比較方便,計算成本,計算物料需求也好處理
    如果這個層次達到几十層,你這樣寫不是要多達几十個字段?
      

  6.   

    http://community.csdn.net/Expert/topic/5714/5714850.xml?temp=.5985224 已结
    今天在等等看看还有什么好方法没有,明天再结
      

  7.   

    表A(部门)--字段
    部门ID    部门名称   上级部门  頂級部門      頂頂級部門  
    --------------------
    樓主的表結構就是這樣的嗎?我想看下你的真實數據