Без каких-либо входных данных трудно дать вам точный ответ. Однако, я думаю, что-то вроде этого - то, что вы ищете.
Я использовал простой набор данных для тестирования. Я попытался сгруппировать макет сценария, так что вы можете легко увидеть количество детей на основе ParentEntryID:
-- Create a table.
DROP TABLE Entries
CREATE TABLE Entries
(
EntryID INT,
EntryName VARCHAR(20),
ParentEntryID INT,
Depth INT,
DatePosted DATE
);
-- Populate the table
INSERT INTO Entries VALUES
(1, 'A', null, null, CURRENT_TIMESTAMP)
,(73, 'C', 1, 0, CURRENT_TIMESTAMP)
,(16, 'B', 73, 1, CURRENT_TIMESTAMP)
,(85, 'G', 73, 1, DATEADD(DAY, 1, CURRENT_TIMESTAMP))
,(74, 'D', 73, 1, CURRENT_TIMESTAMP)
,(75, 'E', 74, 2, CURRENT_TIMESTAMP)
,(76, 'F', 74, 2, CURRENT_TIMESTAMP)
,(86, 'H', 85, 3, DATEADD(DAY, 2, CURRENT_TIMESTAMP))
,(87, 'I', 85, 3, DATEADD(DAY, 2, CURRENT_TIMESTAMP))
,(88, 'J', 86, 4, DATEADD(DAY, 3, CURRENT_TIMESTAMP))
,(89, 'K', 88, 5, CURRENT_TIMESTAMP)
,(90, 'L', 88, 5, CURRENT_TIMESTAMP)
,(91, 'M', 88, 5, CURRENT_TIMESTAMP)
,(92, 'N', 88, 5, CURRENT_TIMESTAMP);
Затем вы можете использовать рекурсивное общее табличное выражение. Я прокомментировал TOP 2
и WHERE Depth = 0
, чтобы дать больше результатов. (Я думаю, что это облегчает понимание на основе небольшого количества тестовых данных.) Вы можете заменить их для своих требований.
;WITH MyEntries (EntryID, ParentEntryID, EntryName, Depth, DatePosted)
AS
(
-- Anchor
SELECT EntryID, ParentEntryID, EntryName, Depth, DatePosted
FROM Entries
--WHERE Depth = 0
UNION ALL
-- Recursive
SELECT Recurs.EntryID, Recurs.ParentEntryID, Recurs.EntryName, Recurs.Depth, Recurs.DatePosted
FROM Entries AS Recurs
INNER JOIN MyEntries AS Anchor
ON Recurs.EntryID = Anchor.ParentEntryID
--WHERE Recurs.Depth = 0
)
SELECT DISTINCT
--TOP 2
ME.EntryID
,ME.ParentEntryID
,ME.EntryName
,ME.Depth
,ME.DatePosted
,COALESCE(VT.ChildCOunt, 0) AS 'ChildCount'
FROM MyEntries AS ME
LEFT JOIN (SELECT ParentEntryID, COUNT(1) AS 'ChildCount'
FROM Entries
GROUP BY ParentEntryID) AS VT
ON ME.EntryID = VT.ParentEntryID
ORDER BY
ME.DatePosted;
Я не уверен, что это самый эффективный способ, но он работает.
Под сущностью вы имеете в виду всех детей этой записи или только следующего потомка? – DhruvJoshi
@DhruvJoshi только потомок и подсчет субтитров потомка – renakre
Вот отличное место для начала. http://spaghettidba.com/2015/04/24/how-to-post-a-t-sql-question-on-a-public-forum/ –