У меня есть таблица, в которой мне нужно получить некоторые конкретные данные для представления. Вот структура базовой таблицы с некоторыми данными выборки:Нужна помощь с SQL CTE Query
| UserID | ReportsToUserID | Org ID |
-------------------------------------
| 1 | NULL | 1 |
-------------------------------------
| 2 | 1 | 1 |
-------------------------------------
| 3 | 2 | 1 |
-------------------------------------
| 4 | 3 | 1 |
-------------------------------------
Пользователям будут вводить отчеты и пользователи могут просматривать отчеты пользователей, которые сообщают о них и всех пользователей, которые сообщают этим пользователям. Пользователи, которые никому не сообщают, могут видеть все в своей организации. Учитывая мои данные выше, пользователь 1 может видеть отчеты 2, 3, & 4; пользователь 2 может видеть отчеты 3 & 4; и пользователь 3 может увидеть отчеты 4.
для зрения, я хотел бы иметь возвращенные данные следующим образом:
| UserID | CanSeeUserID | OrgID |
--------------------------------------------
| 1 | 2 | 1 |
--------------------------------------------
| 1 | 3 | 1 |
--------------------------------------------
| 1 | 4 | 1 |
--------------------------------------------
| 2 | 3 | 1 |
--------------------------------------------
etc...
Ниже мой текущий код, любая помощь очень ценится.
WITH CTEUsers (UserID, CanSeeUserID, OrgID)
AS
(
SELECT e.ID, e.ReportsToUserID, e.OrgID
FROM Users e WITH(NOLOCK)
WHERE COALESCE(ReportsToUserID,0) = 0 --ReportsToUserID can be NULL or 0
UNION ALL
SELECT e.ReportsToUserID, e.ID,e.OrgID
FROM Users e WITH(NOLOCK)
JOIN CTEUsers c
ON e.ID = c.UserID
)
SELECT * FROM CTEUsers
К сожалению, это не возвращает то, что я ищу. – Chuck