计算行之前的出现次数

时间:2018-10-22 12:24:20

标签: sql sql-server tsql count

我对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 |
+-----------+---------+-------------+

使用表格:

dbo.astComponents

dbo.astAssets

dbo.stkStockItems

dbo.stkCommodities

dbo.stkCategories

将表共享为链接的歉意,但这些表确实很长

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;