sql中的树结构相关操作

sql中的树结构相关操作

 

1.查询出树状结构,目前这种方法适用于只有一个根节点情况,如果有多个根节点,则有异常。

tblDepartment结构如下:

 

列名

类型

允许为空

Department 

nvarchar(50)

DepartmentID 

nvarchar(50) 

SuperiorDepartment 

nvarchar(50) 

 

查询语名如下:

 

DECLARE @t TABLE(SuperiorDepartment varchar(50),[Level] int,[Path] varchar(8000),Department nvarchar(50))

DECLARE @l int

SET @l=0

INSERT @t SELECT DISTINCT SuperiorDepartment,@l,RIGHT(SPACE(20)+isnull(SuperiorDepartment,''),20),Department

FROM tblDepartment a

WHERE NOT EXISTS(

    SELECT * FROM tblDepartment WHERE DepartmentID=a.SuperiorDepartment)

 

WHILE @@ROWCOUNT>0

BEGIN

    SET @l=@l+1

    INSERT @t SELECT a.DepartmentID,@l,b.[Path]+RIGHT(SPACE(20)+a.DepartmentID,20),b.Department

    FROM tblDepartment a,@t b

    WHERE isnull(a.SuperiorDepartment,'')=isnull(b.SuperiorDepartment,'') AND b.[Level]=@l-1

END

SELECT SuperiorDepartment=CASE [Level] WHEN 0 THEN '' ELSE '|'+REPLICATE('-----',[Level]) END+isnull(SuperiorDepartment,'')+' '+Department,

    [Level]

FROM @t

ORDER BY Path

 

2.   利用视图

注意:这里使用了msSql中特有的sql语法。

 

列名

类型

允许为空

备注

ID 

int

 

Name 

nvarchar(50) 

 

PID

int

0NULL表示根节点

IsValid 

bit 

 

 

CREATE VIEW [dbo].[view_WarehouseWith]

AS

with warehouse as

    (select ID,isnull(PID,0) as PID

    ,isnull(convert(varchar(max),ID),'0') as IDPath

    ,convert(varchar(max),[Name]) as NamePath

    ,IsValid

    from tblWarehouseNumber (nolock)

    where PID IS NULL 

    union all

    select t.ID,t.PID

    ,convert(varchar(max),c.IDPath+'/'+Convert(varchar(Max),t.ID))

    ,convert(varchar(max),c.NamePath+'/'+t.Name)

    ,t.IsValid

    from tblWarehouseNumber as t (nolock) inner join warehouse c

    on t.PID=c.ID)

    select *,ChildCount=(select count(*) from tblWarehouseNumber  (nolock) where PID=warehouse.ID) from warehouse

GO

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值