2010-10-22 4 views
0

У меня есть таблица, которая содержит следующие поляSql Server2005 проблема запрос

  • SupervisorID
  • EmpId

Это так же, как реферальной программе. Парень может ссылаться на 3 ребята под ним, то есть 3 относится к трем парням, а именно к 4 5 8 аналогично 4 относится 9 10 и 11, а также 8 относится к 12, 13 это выглядит следующим образом.

Я хочу получить запрос получить общее количество нисходящих членов под парнем сказать 3

+0

Рассмотрим повторную формулировку/форматирование вопрос. Очень трудно понять. – RPM1984

+0

Спасибо @OMG Ponies. :) Еще трудно понять второй абзац tho (не из-за форматирования, а из-за плохой формулировки). – RPM1984

ответ

3

Вы можете использовать рекурсивный CTE.

Что-то вроде этого

DECLARE @Table TABLE(
     Supervisorid INT, 
     Empid INT 
) 

INSERT INTO @Table SELECT 3, 4 
INSERT INTO @Table SELECT 3, 5 
INSERT INTO @Table SELECT 3, 8 

INSERT INTO @Table SELECT 4, 9 
INSERT INTO @Table SELECT 4, 10 
INSERT INTO @Table SELECT 4, 11 

INSERT INTO @Table SELECT 8, 12 
INSERT INTO @Table SELECT 8, 13 

DECLARE @ID INT 
SELECT @ID = 3 

;WITH Vals AS (
     SELECT * 
     FROM @Table 
     WHERE SuperVisorID = @ID 
     UNION ALL 
     SELECT v.SuperVisorID, 
       t.Empid 
     FROM Vals v INNER JOIN 
       @Table t ON v.Empid = t.Supervisorid 
) 
SELECT SuperVisorID, 
     COUNT(Empid) Total 
FROM Vals 
GROUP BY SuperVisorID 
Смежные вопросы