T-SQL hierarchy query(T-SQL层次查询)
本文介绍了T-SQL层次查询的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个包含分层数据的表: 这是一个包含id、父代id、名称、代码(有时不填充)、Level和isroot列的数据示例。在实际场景中,将有更多的级别,而不仅仅是2个级别,但现在让我们来看一下简化的示例。我需要做的是遍历所有记录,并在层次结构的任何级别找到id未填充的行:
- ID范围为6到10的行应返回,因为它们在层次结构的任何点都没有填充代码
- 不应返回从%1到%5的行,因为层次结构中的某个位置提到了代码。
如何使用T-SQL解决此问题?
我想到的唯一解决方案是递归(CTE或While),但我发现我尝试实现的解决方案太复杂,无法解决问题。
推荐答案
与@DhruvJoshi的答案略有不同,因为它可能有用:
WITH recCTE AS
(
SELECT
id,
parent_id,
CASE WHEN CODE IS NOT NULL THEN 1 ELSE 0 END as code_check,
1 as depth,
CAST(id as VARCHAR(50)) as path
FROM table
WHERE isRootLevel = 1
UNION ALL
SELECT
table.id,
table.parent_id,
CASE WHEN CODE IS NOT NULL OR reccte.code_check = 1 THEN 1 ELSE 0 END,
depth + 1 as depth,
reccte.path + CAST(table.id AS varchar(10)) as path
FROM
recCTE
INNER JOIN table ON
recCTE.ID = table.parent_id
WHERE depth < 20 /*just in case you start cycling/endless looping*/
)
SELECT * FROM recCTE where code_check = 0 ORDER BY path, depth;
这篇关于T-SQL层次查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:T-SQL层次查询


猜你喜欢
- 在SQL中,如何为每个组选择前2行 2021-01-01
- SQL 临时表问题 2022-01-01
- 如何将 Byte[] 插入 SQL Server VARBINARY 列 2021-01-01
- 远程 mySQL 连接抛出“无法使用旧的不安全身份验证连接到 MySQL 4.1+"来自 XAMPP 的错误 2022-01-01
- 如何将 SonarQube 6.7 从 MySQL 迁移到 postgresql 2022-01-01
- 如何使用 pip 安装 Python MySQLdb 模块? 2021-01-01
- 以一个值为轴心,但将一行上的数据按另一行分组? 2022-01-01
- 导入具有可变标题的 Excel 文件 2021-01-01
- 使用 Oracle PL/SQL developer 生成测试数据 2021-01-01
- 更改自动增量起始编号? 2021-01-01