sql server 遍历表成一棵树结构
一棵树的层次结构都在一张表内,当有这样的需要的时候。。
可以这样玩:
<!-- 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 }">-- </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 遍历表成一棵树结构的更多相关文章
- SQL Server遍历表的几种方法 转载
SQL Server遍历表的几种方法 阅读目录 使用游标 使用表变量 使用临时表 在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易 ...
- SQL Server遍历表中记录的2种方法
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录.本文将介绍利用使用表变量和游标实现数据库中表的遍历. 表变量来实现表 ...
- SQL Server遍历表的几种方法
在数据库开发过程中,我们经常会碰到要遍历数据表的情形,一提到遍历表,我们第一印象可能就想到使用游标,使用游标虽然直观易懂,但是它不符合面向集合操作的原则,而且性能也比面向集合低.当然,从面向集合操作的 ...
- sql server遍历表不用游标和临时表的方法
表结果如图 )) ,'Sky,Blue,Water' ,'Book,Apple,Shirt' ,'Cup,Yellow,org' ,'box,phone,paper' GO SELECT id,SUB ...
- sql while 遍历表
declare @n int declare @rowcount int ) create table #temp ( id ,), employeeName ) ) insert into #tem ...
- SQL Server中如何实现遍历表的记录
SQL Server遍历表一般都要用到游标,SQL Server中可以很容易的用游标实现循环,实现SQL Server遍历表中记录. 但游标在实际的开发中都不推荐使用. 我们知道还可以借助临时表或表变 ...
- SQL Server系列
这里整理了我学习SQL Server的全部文章,包括从基础到高级,做一个目录,方便以后查找. SQL Server数据类型 SQL Server中开发常用的数据类型 单表查询和多表查询 一个单表查询的 ...
- 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 ...
- SQL SERVER 中 实现主表1行记录,子表多行记录 整合成一条虚拟列
表中有这样的记录,简单的主子表,现要想通过left join 语句把两表关联起来 select * from tbl_diary_reback a left join tbl_diary_reback ...
随机推荐
- Python 解leetcode:48. Rotate Image
题目描述:把一个二维数组顺时针旋转90度: 思路: 对于数组每一圈进行旋转,使用m控制圈数: 每一圈的四个元素顺时针替换,可以直接使用Python的解包,使用k控制每一圈的具体元素: class So ...
- 缓存穿透 & 缓存雪崩 & 缓存击穿
一 缓存穿透 1. 行为 查询一个一定不存在的数据.存储层(姑且认为是db,下面都用db指代)查不到数据则不写入缓存,那么下次请求这个不存在的数据同样会到db层查询,失去了缓存的意义.流量大或人为恶意 ...
- 【Python】**kwargs和takes 1 positional argument but 2 were given
Python的函数定义中可以在参数里添加**kwargs——简单来说目的是允许添加不定参数名称的参数,并作为字典传递参数.但前提是——你必须提供参数名. 例如下述情况: class C(): def ...
- 10.使用du将文件按大小进行排序
按G进行排序du -sh * | grep G | sort -nr
- 第十二章 ZYNQ-MIZ702 PS读写PL端BRAM
本篇文章目的是使用Block Memory进行PS和PL的数据交互或者数据共享,通过zynq PS端的Master GP0端口向BRAM写数据,然后再通过PS端的Mater GP1把数据读出来,将 ...
- Disruptor 并发框架
什么是Disruptor Martin Fowler在自己网站上写了一篇LMAX架构的文章,在文章中他介绍了LMAX是一种新型零售金融交易平台,它能够以很低的延迟产生大量交易.这个系统是建立在JVM平 ...
- 电脑无法上网,DNS出现fec0:0:0:ffff::1%1问题
具体描述:qq,微信可用网,但其他不能用. 一.win+r 输入cmd 打开命令行:ipconfig /all 查看DNS 二.打开文本编辑器,输入如下文本: @Echo onpushd\window ...
- Django rest-framework框架-版本控制
第一版: from rest_framework.versioning import BaseVersioning class ParamVersion(object): def determine_ ...
- ADO与达梦7产生的一个未知问题
采用OLEDB与达梦7建立数据库连接 连接成功 查询表成功 打开表成功 当进行到addnew 操作时 报异常,未知错误 而且是仅针对这张表 ,其他表都没有问题 当清空数据后可以再插入一次数据,之后就 ...
- Web Api 将DataTable装换成Excel,并通过文件流将其下载
不废话,直接上代码 前端代码 <input type="button" class="layui-btn" value="Test-GetFil ...