#vba #ms-access #distinct #distinct-on
#vba #ms-access #различное #distinct-на
Вопрос:
Мой код
У меня есть запрос доступа:
SELECT DISTINCT [Request-Priority, ALL_Q].RequestID, "Awaiting Approval" AS RequestStatus
FROM [Request-Priority, ALL_Q] LEFT JOIN LIST_RequestBurndown_Q ON [Request-Priority, ALL_Q].RequestID = LIST_RequestBurndown_Q.RequestID
WHERE (((LIST_RequestBurndown_Q.MilestoneStatus)="Awaiting Approval") AND (([Request-Priority, ALL_Q].[Completed on]) Is Null))
UNION
SELECT DISTINCT [Request-Priority, ALL_Q].RequestID, "Blocked (see notes)" AS RequestStatus
FROM [Request-Priority, ALL_Q] LEFT JOIN LIST_RequestBurndown_Q ON [Request-Priority, ALL_Q].RequestID = LIST_RequestBurndown_Q.RequestID
WHERE (((LIST_RequestBurndown_Q.MilestoneStatus)="Blocked (see notes)") AND (([Request-Priority, ALL_Q].[Completed on]) Is Null))
UNION
SELECT DISTINCT [Request-Priority, ALL_Q].RequestID, "Completed - Awaiting Rollout" AS RequestStatus
FROM [Request-Priority, ALL_Q] LEFT JOIN LIST_RequestBurndown_Q ON [Request-Priority, ALL_Q].RequestID = LIST_RequestBurndown_Q.RequestID
WHERE (((LIST_RequestBurndown_Q.MilestoneStatus)="Completed") AND (([Request-Priority, ALL_Q].[Completed on]) Is Null));
Основная концепция запроса … на основе статуса отдельных этапов ( LIST_RequestBurndown_Q.MilestoneStatus
) определите общий статус RequestID ( [Request-Priority, ALL_Q].RequestID
).
Моя проблема
Для некоторых идентификаторов запроса будут вехи в нескольких состояниях. Например, я могу получить такие результаты, как:
RequestID RequestStatus
123 Awaiting Approval
243 Blocked
243 Awaiting Approval
243 Completed - Awaiting Rollout
542 Awaiting Approval
Что я хотел бы сделать, так это «расставить приоритеты», которые RequestStatus
отображаются так, чтобы на них была только одна запись RequestID
.
Я пытался придумать, как это сделать, используя ORDER BY
, WHERE
, DISTINCT ON
, или, возможно, даже просто создав таблицу возможных параметров состояния с соответствующим приоритетом и используя MAX
— но на данный момент я просто переусердствовал. Любая помощь будет принята с благодарностью!
Ответ №1:
Предложение: таблица для моделирования приоритизации:
CREATE TABLE RequestStatusPrioritization
( RequestStatus VARCHAR(20) NOT NULL
REFERENCES RequestStatuses ( RequestStatus ),
RequestStatusRank INT NOT NULL );
… затем присоединитесь к этой таблице и верните наименьший MIN
ранг () .
Комментарии:
1. Да, это в основном то, о чем я думал в отношении моей таблицы «связанных приоритетов», которую я мог бы затем использовать
MAX
в своем запросе. Я надеялся избежать подобной таблицы, если бы был способ сделать все это с помощью одной строки кода в запросе.