SQL Запрос для отображения вложенных тем - PullRequest
0 голосов
/ 12 февраля 2020

Вывод имеет только 2 столбца

  1. Текст: Отображается на изображении
  2. Id: идентификатор последнего субъекта (последнего ребенка)
CREATE TABLE Subjects (
    SubjectId INT PRIMARY KEY IDENTITY(1,1),
    Subject VARCHAR(70),
    ParentSubjectId INT,
    IsActive BIT,
    CreatedDate DATETIME,
    CreatedBy INT,
    UpdatedDate DATETIME,
    UpdatedBy INT
);



INSERT INTO Subjects (Subject, ParentSubjectId) VALUES ('Accountancy',0);

INSERT INTO Subjects (Subject, ParentSubjectId) VALUES ('Accounting',1);
INSERT INTO Subjects (Subject, ParentSubjectId) VALUES ('Bookkipping',1);
INSERT INTO Subjects (Subject, ParentSubjectId) VALUES ('Payroll',1);

INSERT INTO Subjects (Subject, ParentSubjectId) VALUES ('Sage Payroll',4);



SELECT * FROM Subjects

output image

1 Ответ

0 голосов
/ 12 февраля 2020
WITH mysubjects as (
   SELECT 0 as i, s.SubjectId, cast(s.[Subject] as varchar(max)) as "Subject"
   from Subjects s
   where ParentSubjectId=0
   union all 
   SELECT i+1, s.SubjectId, CONCAT(c1.[Subject],'-',s.Subject) 
   from mysubjects c1 
   inner join Subjects s on s.ParentSubjectId=c1.SubjectId and c1.subjectId>i-1
   where i<2  
   )
select * 
from mysubjects;

вывод:

i           SubjectId   Subject
----------- ----------- ---------------------------------------------
0           1           Accountancy
1           2           Accountancy-Accounting
1           3           Accountancy-Bookkipping
1           4           Accountancy-Payroll
2           5           Accountancy-Payroll-Sage Payroll
...