mssql server 树形结构的存储与查询实例

php中文网
发布: 2016-06-07 17:47:29
原创
1144人浏览过

mssql server 树形结构的存储与查询实例
设计中常常会遇到需要存储树形结构,比如员工关系表、组织结构表,等等。

sql code

--测试数据 create table #employees(     employeecode varchar(20) not null primary key clustered,     reporttocode varchar(20) null) go insert into #employees values('a',null) insert into #employees values('b','a') insert into #employees values('c','a') insert into #employees values('d','a') insert into #employees values('e','b') insert into #employees values('f','b') insert into #employees values('g','c') insert into #employees values('h','d') insert into #employees values('i','d') insert into #employees values('j','d') insert into #employees values('k','j') insert into #employees values('l','j') insert into #employees values('m','j') insert into #employees values('n','k') go


/*
可能遇到的查询问题:
1. 员工'd'的所有直接下属
2. 员工'd'的所有2级以内的下属(包括直接下属和直接下属的下属)
3. 员工'n'的所有上级(按报告线顺序列出)
4. 员工@employeecode的所有@leveldown级以内的下属(@employeecode和@leveldown以变量传入)
declare @employeecode varchar(20), @leveldown int;
set @employeecode = 'd';
set @leveldown = 2;
5. 员工@employeecode的所有@levelup级以内的上级(@employeecode和@levelup以变量传入)
declare @employeecode varchar(20), @levelup int;
set @employeecode = 'n';
set @levelup = 2;
*/
--用递归cte实现员工树形关系表

with cte as(
    select
        employeecode,
        reporttocode,
        reporttodepth = 0,
        reporttopath = cast('/' + employeecode + '/' as varchar(200))
    from #employees
    where reporttocode is null
    union all
    select
        e.employeecode,
        e.reporttocode,
        reporttodepth = mgr.reporttodepth + 1,
        reporttopath = cast(mgr.reporttopath + e.employeecode + '/' as varchar(200))
    from #employees e
    inner join cte mgr
    on e.reporttocode = mgr.employeecode
)
select * from cte order by reporttopath
最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号