表1tArea,是个树状表
ID    Name     Upid
1    所有地区    0
2     国内       1
3     国外       1
4     广州       2
5     美国       3     0 所有地区
     |
     |----国内--广州
     |       
     |----国外--美国   ParentID  是UPID

表2 Client
ID   Code  Name AreaID(FK)
1    H0001 CUST1  4
2    H0002 Cust2  5我想知道,怎么得出以上这两个客户所属地区广州和美国分别是属于"国内"和"国外"
也就是说,我在表2中有一些记录,每个记录通过AreaID和表1的ID关联,,,,我想写一段代码,可以知道每个表2的记录,他的所属地区的上级ID是否有"国内"和"国外"这一类别的.也就是是否该AREAID在表1,是不是
2     国内       1
3     国外       1
的子节点.......

解决方案 »

  1.   

    Select B.ID,B.Code,B.Name,B.AreaID,B.Upid,B.AreaName From 
    (Select C.ID,C.Code,C.Name,C.AreaID,L.Upid,L.Name AS AreaName
    From Client C Left join ltArea L on C.AreaID=L.ID) AS B 
    Where B.Upid='2' or B.Upid='3'
      

  2.   

    这样就可以取出来Client表中是国外和国内的所有数据.不知道这样是否符合楼主的要求
      

  3.   

    树状表,有点意思。嘿嘿。
    要写个递归的存储过程或自定义函数。
    这样子,返回值1为所有地区,2为国内,3为国外 
    CREATE FUNCTION  dbo.isabroad  (@aid int)  
    RETURNS  int  AS  
    BEGIN 
    declare @tmpid int
    if @aid=1 
    return 1
    if @aid=2
    return 2
    if @aid=3
    return 3
    select @tmpid=upid from ltArea where id=@aid 
    return dbo.isabroad(@tmpid)END
      

  4.   

    merkey2002(小样的) ( ) 信誉:88 
    看不太明白,你的意思,那么这个函数要怎么使用。。
    能不能给个列子呢。
      

  5.   

    merkey2002(小样的) 已经回答了, 他写的是个存储过程, 就是个递归。你的应用程序调用存储过程即可。