Получение иерархических табличных данных в виде простого табличного формата для отчета? Помогите, пожалуйста!
Уважаемые эксперты,
У меня есть иерархическая таблица, которая хранит данные, как показано ниже,в базе данных SQL Server 2008.
ID Description Category ParentID 1 ABC Objective NULL 2 CDE Objective NULL 3 XXX Objective NULL 4 YYY Criteria 1 5 DDD Criteria 1 6 AAA Criteria 2 7 CCC Procedure 4 8 EEEE Procedure 4 9 JJJJ Procedure 6
А теперь я хочу написать книгу. Хранимая процедура чтобы получить данные из вышеприведенной иерархической таблицы в формате ниже (рис. 2):
Objective Criteria Procedure ABC YYY CCC ABC YYY ZZZ CDE KKK RRRR CDE DDD EEEE XXX AAA JJJJ
для целей отчета.
ОТРЕДАКТИРОВАННЫЙ:
Я сделал запрос CTE, как показано ниже:
;WITH CteDAP ( ID, HierarchyID, Description, Category_Level, Depth) AS ( SELECT DISTINCT A.ID, A.HierarchyID, A.Description, B.Name AS Category_Level,0 AS Depth FROM tblHierarchy A INNER JOIN tblCat_lvl B ON A.fkCat_lvlId = B.pkCat_lvlId WHERE A.HierarchyID IS NULL UNION ALL SELECT C.ID, C.HierarchyID, C.Description, D.Name AS Category_Level, (CTE.Depth + 1) AS Depth FROM tblHierarchy C INNER JOIN tblCat_lvl D ON C.fkCat_lvlId = D.pkCat_lvlId INNER JOIN CteDAP CTE ON C.HierarchyID = CTE.ID ) SELECT * FROM CteDAP ORDER BY Depth, Description
Получил результат как :
ID HierarchyID Description category_Level Depth 10 NULL Capital Grants………… AOC 0 11 NULL Contributions………….. AOC 0 15 NULL Current Grants ………… AOC 0 20 10 To ascertain that expenditure……………. Overall Objective 1 25 11 To ascertain that other ………………………. Overall Objective 1 26 15 To ascertain that pay ……………….. Overall Objective 1 28 20 To ascertain that ……………. Sub Objective 2 30 20 Ascertain………….. Sub Objective 2 40 25 Evaluation of ……………. Sub Objective 2 42 28 Received should ……….. Criteria 3 43 28 Received should be ……….. Criteria 3 45 40 All supplies of ………… Criteria 3 50 40 Annual increments ……………… Criteria 3 53 42 Check from the ………….. Procedure 4 54 42 Check whether …………… Procedure 4 59 50 Check whether it……………… Procedure 4Теперь мне нужны данные (рис. 2) формат.
Любая помощь будет высоко оценена. Спасибо.
Что я уже пробовал:
Я попробовал написать CTE, но не смог добиться нужного формата, динамический POVIT может помочь мне, но я не знаю, как написать динамический POVIT. Помогите, Пожалуйста!