Доступ — выбор различий на основе значения поля

#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 в своем запросе. Я надеялся избежать подобной таблицы, если бы был способ сделать все это с помощью одной строки кода в запросе.