一棵树的层次结构都在一张表内,当有这样的需要的时候。。

可以这样玩:

<!-- DepartmentDTO 对象对应 department表_查询sql -->
<sql id="department_select_sql">
with ldepartment as (
select
dept_id,
parent_id,
0 as dept_level,
row_number()over(order by getdate()) as orderid
from
department
where
(
parent_id is null
or parent_id = ''
)
union all
select
a.dept_id,
a.parent_id,
b.dept_level + 1 as dept_level,
b.orderid*100+row_number()over(order by getdate()) as orderid
from
department a,
ldepartment b
where
a.parent_id = b.dept_id
) select
t1.dept_level,
t1.orderid,
t2.paic_unique_deptid,
t2.deptid_descr,
t2.parent_id,
(select aa.deptid_descr + '('+aa.dept_id+')' from department aa where aa.dept_id=t2.parent_id ) as parent_id_desc,
t2.dept_id,
t2.ou_type,
t2.date_created,
t2.created_by,
t2.date_updated,
t2.updated_by,
t2.row_id
from ldepartment t1, department t2
where t1.dept_id = t2.dept_id
<isNotEmpty prepend="and" property="deptid_descr">
t2.deptid_descr like '%+#deptid_descr#+%'
</isNotEmpty>
<isNotEmpty prepend="and" property="parent_id">
t2.parent_id = #parent_id#
</isNotEmpty> order by ltrim(t1.orderid) // 关键点(字符串排序)
</sql>

调用:

<select id="department_find" parameterClass="java.util.Map"
resultClass="com.pasc.supms.parameter.dto.DepartmentDTO">
<include refid="department_select_sql" />
</select>

java对象:

public class DepartmentDTO extends SupmsBaseDTO {

    private String paic_unique_deptid; // 部门唯一编号
private String deptid_descr; // 部门名称
private String parent_id; // 上级部门编号
private String parent_id_desc; // 上级部门名称编号
private String dept_id; // 部门属主编号
private String ou_type; // 部门类型
private String dept_level; // 部门层级

jsp页面:

<table cellpadding="0" cellspacing="0" class="table_list_2" >
<thead align="center">
<tr>
<th >部门编号</th>
<th >部门名称</th>
<th >上级部门编号</th>
<th >部门类型</th>
</tr>
</thead>
<tbody align="center">
<c:choose>
<c:when test="${not empty pageBean.resultList}">
<c:forEach var="doc" items="${pageBean.resultList}" varStatus="i">
<tr>
<td><!-- <a href="#" onclick="detailDo('${doc.row_id}');" title="点击查看详情" class="blue"></a> -->
<c:forEach begin="1" end="${doc.dept_level }">--&nbsp;</c:forEach>
${doc.dept_id }</td>
<td>${doc.deptid_descr }</td>
<td>${doc.parent_id_desc }</td>
<td>${doc.ou_type }</td>
</tr>
</c:forEach>
</c:when>
<c:otherwise>
<tr id="noList">
<td colspan="11" align="center">对不起,暂时还没有记录!</td>
</tr>
</c:otherwise>
</c:choose>
</tbody>
</table>

结果:

sql server 遍历表成一棵树结构的更多相关文章

  1. SQL Server遍历表的几种方法 转载

    SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...

  2. SQL Server遍历表中记录的2种方法

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...

  3. SQL Server遍历表的几种方法

    在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的 ...

  4. sql server遍历表不用游标和临时表的方法

    表结果如图 )) ,'Sky,Blue,Water' ,'Book,Apple,Shirt' ,'Cup,Yellow,org' ,'box,phone,paper' GO SELECT id,SUB ...

  5. sql while 遍历表

    declare @n int declare @rowcount int ) create table #temp ( id ,), employeeName ) ) insert into #tem ...

  6. SQL Server中如何实现遍历表的记录

    SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变 ...

  7. SQL Server系列

    这里整理了我学习SQL Server的全部文章,包括从基础到高级,做一个目录,方便以后查找. SQL Server数据类型 SQL Server中开发常用的数据类型 单表查询和多表查询 一个单表查询的 ...

  8. Expression构建DataTable to Entity 映射委托 sqlserver 数据库里面金额类型为什么不建议用float,实例告诉你为什么不能。 sql server 多行数据合并成一列 C# 字符串大写转小写,小写转大写,数字保留,其他除外 从0开始用U盘制作启动盘装Windows10系统(联想R720笔记本)并永久激活方法 纯CSS打造淘宝导航菜单栏 C# Winform

    Expression构建DataTable to Entity 映射委托   1 namespace Echofool.Utility.Common { 2 using System; 3 using ...

  9. SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列

    表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...

随机推荐

  1. Python 解leetcode:48. Rotate Image

    题目描述:把一个二维数组顺时针旋转90度: 思路: 对于数组每一圈进行旋转,使用m控制圈数: 每一圈的四个元素顺时针替换,可以直接使用Python的解包,使用k控制每一圈的具体元素: class So ...

  2. 缓存穿透 & 缓存雪崩 & 缓存击穿

    一 缓存穿透 1. 行为 查询一个一定不存在的数据.存储层(姑且认为是db,下面都用db指代)查不到数据则不写入缓存,那么下次请求这个不存在的数据同样会到db层查询,失去了缓存的意义.流量大或人为恶意 ...

  3. 【Python】**kwargs和takes 1 positional argument but 2 were given

    Python的函数定义中可以在参数里添加**kwargs——简单来说目的是允许添加不定参数名称的参数,并作为字典传递参数.但前提是——你必须提供参数名. 例如下述情况: class C(): def ...

  4. 10.使用du将文件按大小进行排序

    按G进行排序du -sh * | grep G | sort -nr

  5. 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM

      本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...

  6. Disruptor 并发框架

    什么是Disruptor Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JVM平 ...

  7. 电脑无法上网,DNS出现fec0:0:0:ffff::1%1问题

    具体描述:qq,微信可用网,但其他不能用. 一.win+r 输入cmd 打开命令行:ipconfig /all 查看DNS 二.打开文本编辑器,输入如下文本: @Echo onpushd\window ...

  8. Django rest-framework框架-版本控制

    第一版: from rest_framework.versioning import BaseVersioning class ParamVersion(object): def determine_ ...

  9. ADO与达梦7产生的一个未知问题

    采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时  报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...

  10. Web Api 将DataTable装换成Excel,并通过文件流将其下载

    不废话,直接上代码 前端代码 <input type="button" class="layui-btn" value="Test-GetFil ...