Как можно выполнить всю СТРУКТУРУ ранжирования. ИСПОЛЬЗОВАНИЕ рекурсивного

#sql #sql-server #recursive-query

Вопрос:

 CREATE DATABASE TASKPERFORMANCE1

USE TASKPERFORMANCE1

DROP TABLE Students

CREATE TABLE Students 
(
     ID VARCHAR(99), 
     Name VARCHAR(99), 
     LeaderID VARCHAR(99)
)

INSERT INTO Students (ID, Name, LeaderID) 
VALUES (100, 'Baldo', null),
       (101, 'Cardo', 101),
       (102, 'Pedro', 101),
       (103, 'Luningning', 101),
       (104, 'Paolo', 102),
       (105, 'Roberto', 102),
       (106, 'Narciso', 102),
       (107, 'Jopay', 102),
       (108, 'Bernardo', 103),
       (109, 'Policarpio', 103),
       (110, 'Sisa', 103),
       (111, 'Reginaldo', 104)
 
;WITH RankingStructure (LeaderID,ID,Name,Ranking) AS
(
    SELECT LeaderID, ID, Name, 0 AS Ranking
    FROM Students
    WHERE LeaderID IS NULL

    UNION ALL
 
    SELECT S.LeaderID, S.ID, S.Name, R.Ranking   1
    FROM Students S
    INNER JOIN RankingStructure R ON R.ID = S.LeaderID
)
SELECT LeaderID, ID, Name, Ranking
FROM RankingStructure
 

Комментарии:

1. Когда я выполняю коды для рекурсивных, вывод составляет всего 1 строку.

2. Вы используете MS SQL Server или SQLite? Как это связано с S?

3. Похоже на ошибку в данных — никто не объявляет 100/Baldo своим лидером.

4. (101, 'Cardo', 101), Как может один человек быть «лидером» одного и того же человека? Ваша попытка рекурсии завершается неудачей, потому что никто не находится «под» Балдо. Т. Е. Балдо никого не ведет, и ваша попытка рекурсии начинается с этой строки.

5. Спасибо за ваш комментарий. Извините, я новичок в ms sql. как можно решить мою проблему?