我对SQL还是很陌生,所以我不确定是否可行。我有一个层级数据库,我正在尝试建立一个查询,该查询将按此层级对结果进行排序。
我无法按“ TreeLevel”列进行排序(请参见下面的示例),因为这样孩子将与父母分离。此外,所需的顺序取决于各个表中的不同列,因此,就我目前的知识而言,CTE变得更加复杂。
modelBuilder.Entity<Match>()
.HasOne(m => m.Home)
.WithOne()
.HasForeignKey(m => m.HomeId);
modelBuilder.Entity<Match>()
.HasOne(m => m.Away)
.WithOne()
.HasForeignKey(m => m.AwayId);
我想通过确定每行TreeLevel AT的出现次数来进行排序。因此,对于TreeLevel中的第二个“ 2”,此数字应为2。但是,对于第三个2,此数字应为3。有可能吗?
预先感谢
编辑:
这是我现在拥有的SQL:
+-----------+---------+-------------+
| TreeLevel | Code | Parent Code |
+-----------+---------+-------------+
| 1 | 0770.1 | |
| 2 | 0770.50 | 0770.1 |
| 3 | 0804.5 | 0770.50 |
| 2 | 0770.12 | 0770.1 |
| 1 | 0891.1 | |
| 2 | 0980 | 0891.1 |
+-----------+---------+-------------+
使用表格:
将表共享为链接的歉意,但这些表确实很长
答案 0 :(得分:0)
您可以使用递归CTE:
with cte as (
select 1 as lev, code, parent
from t
where parent is null
union all
select lev + 1, t.code, t.parent
from cte join
t
on t.parent = cte.code
)
select *
from cte;