#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. как можно решить мою проблему?