#sql #reporting-services #ssrs-2012
#sql #службы отчетов #ssrs-2012
Вопрос:
Хорошо, ребята, это сводит меня с ума…
У меня есть отчет, в котором содержатся подробные сведения о ряде функций. Эти функции могут зависать от других, существовать сами по себе или и то, и другое.
В результате запроса у меня есть следующие данные:
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
Как вы можете видеть, некоторые функции помещаются в нескольких местах в иерархии. Однако все, что я получаю в отчете, это:
Я группируюсь по Feature_ID, рекурсивный родитель — Parent_ID . Чего мне не хватает?
Комментарии:
1. Каким должен быть ваш результат? Я вижу, что ваш табликс показывает неправильные данные, поскольку должно быть 24
level 0
, так какое выражение уровня вы используете?2. @alejandrozuleta Я использую
=level()
для поля уровня.3. Каков ожидаемый результат?
4. Успокойтесь, ребята. Я взломал его! Я извлек полный путь иерархии для каждого Feature_ID и соответствующий путь для каждого родителя как часть запроса.
Ответ №1:
По вашей формулировке и неожиданному результату создается впечатление, что вы ищете список различных уровней и функций. Надеюсь, следующее полезно. Если нет, возможно, вы можете предоставить некоторый дополнительный контекст, чтобы понять, что вы ищете.
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