MadMyche
Вы экспериментировали с TOP
- Каковы были результаты?
SELECT TOP 3 Row_Number()...
Обновленный. Последние 3 строки могут быть достигнуты, если вы измените порядок, который у вас есть на месте. Вот полный запрос, основанный на этом:
;WITH emp_hierarachy AS(
SELECT emp = EmployeeId, EmployeeId, Manager, Firstname + ' ' + surname as [name], Position
FROM tblEmployee
UNION ALL
SELECT rs.emp, t.EmployeeId, t.Manager, t.Firstname + ' ' + surname as [name], t.Position
FROM tblEmployee t
INNER JOIN emp_hierarachy rs ON t.EmployeeId = rs.Manager
)
SELECT TOP 3 id = Row_Number() OVER (ORDER BY (SELECT 1))
, rs.name
, rs.Position
FROM emp_hierarachy rs
WHERE rs.emp = 179
-- AND rs.EmployeeId != rs.emp
ORDER BY ID -- DESC
Примечания/Вопросы/Вопросы
Пожалуйста, обратите внимание, что
имя поле заключено в квадратные скобки. Имя-это одно из тех слов, которое в определенных контекстах является особенным.Я обычно избегаю их использования.
В своем комментируемом предложении AND вы используете != для неравенства. Пока это действительно в сервере SQL, стандарта ANSI, чтобы использовать
<>
таким образом, переносимость этого кода может быть ограничена.
CTE, похоже, собирает больше данных, чем ему нужно; вызываются только столбцы EmployeeID, [name] и position, а объединение ALL собирается добавить дубликаты записей.
Мне было бы интересно увидеть образцы данных и результаты, которые вы ожидаете получить; поскольку я не знаю схемы этих таблиц, но я думаю, что это может быть значительно сокращено кодовым способом