SSRS无法按级别(层次结构)显示所有行

8

好的,大家好,这让我感到疯狂...

我有一个报告,用于获取多个功能的详细信息。这些功能可以挂在其他功能下面,也可以单独存在或同时存在。

以下是查询结果的数据:

Feature_ID   Parent_ID
24            
24          25
20            
26          12
12            
21          23
26          20
22            
24          23
23          26
24          27
27          28
24          22
29          20
23            
25            
27          29
22          26
28          12

正如您所看到的,一些功能适用于层次结构中的多个位置。 但是,在报告中我只得到:

SSRS输出

我正在按Feature_ID分组,递归父级是Parent_ID。我错过了什么吗?


你的结果应该是什么?我看到你的表格正在显示错误的数据,因为24应该在“级别0”中,那么你使用的级别表达式是什么? - alejandro zuleta
@alejandrozuleta 我正在使用=level()函数来获取层级字段。 - JohnHC
2
你期望的结果是什么? - alejandro zuleta
冷静点,伙计们。我解决了!我在查询中提取了每个Feature_ID的完整层次路径以及每个父级对应的路径。 - JohnHC
1个回答

5

从您的措辞和意外输出来看,似乎您正在寻找一个独特级别和功能的列表。希望以下内容有所帮助。如果不是,请提供更多上下文以了解您正在寻找什么。

declare @table table (Feature_ID int, Parent_ID int);

insert @table values
(24,null),
(24,25),
(20,null),
(26,12),
(12,null),
(21,23),
(26,20),
(22,null),
(24,23),
(23,26),
(24,27),
(27,28),
(24,22),
(29,20),
(23,null),
(25,null),
(27,29),
(22,26),
(28,12);

select * from @table order by 1,2;
select * from @table order by 2,1;

with cte as (
        select  Feature_ID, Parent_ID, 0 [Level], CAST(Feature_ID as varchar(200)) [Path]
        from    @table
        where   Parent_ID is null

        union   all

        select  t.Feature_ID, t.Parent_ID, c.[Level] + 1, cast(c.[Path] + '|' + CAST(t.Feature_ID as varchar(200)) as varchar(200))
        from    @table t
        join    cte c
                on c.Feature_ID = t.Parent_ID
)
select  distinct [Level], Feature_ID
from    cte
order   by [Level], Feature_ID;

这将得到以下结果:
Level   Feature_ID
0   12
0   20
0   22
0   23
0   24
0   25
1   21
1   24
1   26
1   28
1   29
2   22
2   23
2   27
3   21
3   24

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接