Хорошо, вот мои три таблицы:
USER
|--------+----------+----------|
| UserID | UserName | IsActive |
|--------+----------+----------|
| 10 | Mike | 1 |
| 11 | John | 1 |
| 12 | Beth | 1 |
|--------+----------+----------|
REPORT_DISTRIB (таблица ссылок)
|-----------+--------+----------+---------------|
| DistribID | UserID | ReportID | DistribToUser |
|-----------+--------+----------+---------------|
| 1 | 10 | 50 | 1 |
| 2 | 12 | 52 | 0 |
| 3 | 14 | 54 | 1 |
|-----------+--------+----------+---------------|
ОТЧЕТ
|----------+------------+---------------|
| ReportID | ReportName | Distributable |
|----------+------------+---------------|
| 50 | FY2010 | 1 |
| 51 | FY2011 | 1 |
| 52 | FY2012 | 1 |
|----------+------------+---------------|
В проблеме, с которой я сталкиваюсь, у меня есть 200 активных пользователей из таблицы USER и 10 отчетов из таблицы REPORT, которые можно распространять. Для каждого пользователя мне нужно отобразить имя пользователя, имя отчета и то, должен ли этот отчет распространяться среди пользователей, например, так:
|----------+------------+---------------|
| UserName | ReportName | DistribToUser |
|----------+------------+---------------|
| Mike | FY2010 | 1 |
| Beth | FY2012 | 0 |
|----------+------------+---------------|
Я пытаюсь достичь списка результатов 2000 (200 пользователей х 10 отчетов). Проблема заключается в том, что таблица ссылок REPORT_DISTRIB не имеет записи для каждого пользователя с каждым отчетом. Я все еще чувствую, что это возможно ... я ошибаюсь в своих мыслях? Любая помощь с благодарностью.
Это грубо, но это мой запрос (который возвращает 1790 результатов):
SELECT u.UserName, r.ReportName, rd.DistribToUser
FROM USER u
LEFT JOIN REPORT_DISTRIB rd on rd.UserID = u.UserID
and rd.ReportID in (select r.ReportID from REPORT r where r.Distributable = 1)
OUTER APPLY (select r.ReportName from REPORT r where r.ReportID = rd.ReportID) r
WHERE u.IsActive = 1