通过sql server 或者 C#,如何拆分树状序号并输出上级所有结果?
如11.15.1.2,我希望得到的拆分结果是:
11
11.15
11.15.1
通过sql server 或者 C#,如何拆分树状序号并输出上级所有结果
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 老牛源码 2023-10-27 12:10关注
这个问题涉及到的是如何在数据库或C#代码中拆分树状结构的数据。在SQL Server中,我们可以使用递归查询(CTE)来解决这个问题。在C#中,我们可以使用递归方法。下面我会分别给出两种解决方案。
SQL Server解决方案:假设你有一个表Tree,其中包含一个字段Id和一个字段ParentId,用来表示树状结构。然后你有一个字段Number,你想要根据这个字段的每个数字找到其所有的上级。
WITH RecursiveCTE AS ( SELECT Id, ParentId, Number, LEFT(Number, CHARINDEX('.', Number) - 1) AS Level1, CASE WHEN CHARINDEX('.', Number) > 0 THEN SUBSTRING(Number, CHARINDEX('.', Number) + 1, LEN(Number)) ELSE '' END AS Level2, CASE WHEN CHARINDEX('.', Number) > 1 THEN SUBSTRING(Number, CHARINDEX('.', Number) + 2, LEN(Number)) ELSE '' END AS Level3 FROM Tree UNION ALL SELECT t.Id, t.ParentId, t.Number, r.Level1 + '.' + t.Level1 AS Level1, r.Level2 + '.' + t.Level2 AS Level2, r.Level3 + '.' + t.Level3 AS Level3 FROM Tree t INNER JOIN RecursiveCTE r ON t.ParentId = r.Id ) SELECT DISTINCT Level1, Level2, Level3 FROM RecursiveCTE ORDER BY Level1, Level2, Level3;
这个查询首先会获取每个节点的前三个级别(Level1,Level2,Level3),然后递归地获取所有子节点的这三个级别,直到没有更多的子节点为止。最后,我们通过删除最后的.字符并按照.进行分割,来获取每个数字的所有上级。
C#解决方案: 用于拆分树状序号并输出上级所有结果: using System; using System.Collections.Generic; using System.Text.RegularExpressions; public class Program { public static void Main() { string number = "11.15.1.2"; var parts = SplitNumber(number); foreach (var part in parts) { Console.WriteLine(part); } } public static List<string> SplitNumber(string number) { var parts = new List<string>(); string[] numbers = number.Split('.'); for (int i = 0; i < numbers.Length; i++) { string part = string.Join(".", numbers.Take(i+1).ToArray()); parts.Add(part); } return parts; } }
这段代码将输入的树状序号(如"11.15.1.2")拆分为所有可能的组合,并将每个组合添加到列表中。最后,它将打印出所有组合的结果。在这个例子中,输出将是:
"11"
"11.15"
"11.15.1"
"11.15.1.2"解决 无用评论 打赏 举报
悬赏问题
- ¥15 2024-五一综合模拟赛
- ¥15 下图接收小电路,谁知道原理
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭