Скажем, у нас есть две таблицы в базе данных MS Access:
Сервисные пользователи:
| ID | Name | Other details... |
| 1 | Joe | Blah... |
| 2 | Fred | Qwerty... |
| 3 | Bob | Something else...|
Команды, предоставляющие услуги:
| ID | TeamID | UserID |
| 1 | T1 | 1 |
| 2 | T2 | 1 |
| 3 | T2 | 2 |
| 4 | T3 | 2 |
| 5 | T3 | 3 |
Мне нужно создать сводный запрос, который создает по одной строке для каждого пользователя, причем первые несколько команд (по TeamID) назначаются в отдельных столбцах. Как:
Запрос:
| UserID | Name | Team1 | Team2 |
| 1 | Joe | T1 | T2 |
| 2 | Fred | T2 | T3 |
| 3 | Bob | T3 | Null |
Я могу получить столбец Team1 с помощью max () из запроса на дополнительный выбор, но у меня полный ментальный блок на пути достижения Team2, Team3 и т. Д. (Да, я знаю, что если будет назначено больше команд для пользователя, чем я создаю столбцы, запрос потеряет эту информацию: это не проблема).
Редактировать: чтобы уточнить, количество столбцов в запросе будет фиксированным (в реальном запросе всегда будет 7). Если команд меньше, чем столбцов, дополнительные столбцы должны быть пустыми (как в примере). Если команд больше, чем столбцов, в этой сводке будут показаны только первые 7 команд.
Редактировать 2 - Возможное решение, которое не работает ...:
Я пытался ...
SELECT UserTable.ID As UID, UserTable.Name,
(SELECT TOP 1 TeamID FROM TeamTable WHERE UserTable.ID = TeamTable.UserID
ORDER BY TeamID) As Team1
FROM UserTable
... который отлично работает. К сожалению ...
SELECT UserTable.ID As UID, UserTable.Name,
(SELECT TOP 1 TeamID FROM TeamTable WHERE UserTable.ID = TeamTable.UserID
ORDER BY TeamID) As Team1,
(SELECT TOP 1 TeamID FROM TeamTable WHERE UserTable.ID = TeamTable.UserID
AND TeamID <> Team1 ORDER BY TeamID) As Team2
FROM UserTable
... выдает окно параметров для Team1. Идеи о том, как пропустить первые / вторые / и т. Д. Значения из реактивного запроса?