sql - T-SQL 员工层次递归查询
问题描述
我想使用 T-SQL 查询(它可以是递归 CTE 或任何东西),我可以在其中获得以下突出显示的输出
SQL 创建示例表如下
--drop table #hierarchy
CREATE TABLE #hierarchy
(
ID INTEGER NOT NULL PRIMARY KEY,
Value CHAR(10) NOT NULL,
);
INSERT INTO #hierarchy
VALUES (1, 'a1'), (2, 'b2'), (3, 'c3'), (4, 'd4'),
(5, 'e5'), (6, 'f6'), (7, 'g7'), (8, 'h8');
欢迎提出任何建议,尝试了类似于阶乘操作的递归 cte,但希望输入。
提前致谢。
解决方案
您似乎正在寻找字符串连接:
select
id,
value,
(
select string_agg(trim(value), '->') within group(order by id)
from #hierarchy h1
where h1.id <= h.id
) path
from #hierarchy h
编号 | 价值 | 小路
-: | :--------- | :---------------------------- 1 | a1 | a1
2 | b2 | a1->b2
3 | c3 | a1->b2->c3
4 | d4 | a1->b2->c3->d4
5 | e5 | a1->b2->c3->d4->e5
6 | f6 | a1->b2->c3->d4->e5->f6
7 | g7 | a1->b2->c3->d4->e5->f6->g7
8 | h8 | a1->b2->c3->d4->e5->f6->g7->h8
在不支持 `string_agg() 的 SQL Server 版本中,您可以:
select
id,
value,
stuff(
(
select distinct '->' + trim(h1.value) val
from #hierarchy h1
where h1.id <= h.id
order by val
for xml path(''), type
).value('.', 'nvarchar(max)')
, 1, 2, ''
) path
from #hierarchy h
推荐阅读
- kubernetes - 创建多个 Kubernetes 命名空间
- google-cloud-sql - Cloud SQL - 每天都在增长,但不会复制
- python - 'ctrl + c' 不适用于 Windows 上的此 python 代码
- ms-word - 警告:打开了不熟悉的不安全文档
- ios - 快速过滤来自 API 的空值
- python - 如何以编程方式应用多个 where 条件
- angular - Angular + Spring Boot 路由
- xtermjs - xterm.js:如何使用滚动线
- datetime - AWS Athena“无效的日期时间戳”和“文件名路径”
- redis - 多数据中心中的 Redis