#sql #ms-access-2013
#sql #ms-access-2013
Вопрос:
Не уверен, что это возможно, но я надеюсь, что кто-нибудь сможет указать мне правильное направление.
У меня есть база данных, которая проверяет журналы при изменении записи на этапе. Что мне нужно сделать, так это объединить эту резервную копию в отчет, который предоставляет мне самую раннюю запись аудита для каждого этапа по идентификатору записи. т. Е. в итоге я получаю отчет, который выглядит следующим образом.
---- --------- --------- ---------
| ID | Stage1 | Stage2 | Stage3 |
---- --------- --------- ---------
| 1 | 1/10/20 | 1/10/20 | 3/10/20 |
| 2 | 1/10/20 | 2/10/20 | 4/10/20 |
| 3 | 2/10/20 | 2/10/20 | 3/10/20 |
---- --------- --------- ---------
Я могу сделать это с помощью нескольких запросов select, но поскольку мои этапы хранятся в таблице, мне было интересно, есть ли способ построить это динамически. Это также позволило бы свести к минимуму обслуживание в будущем.
Моя таблица «Audit_Log» содержит следующие столбцы:
- Идентификатор записи
- Этап
- Event_Date
Мои «Этапы» хранятся в таблице под названием «Этапы», столбец «Stage».
Любые предложения будут действительно оценены. Спасибо
Ответ №1:
Вы можете попробовать использовать operator TRANSFORM
.
TRANSFORM <aggregate-function-expression>
<select-statement>
PIVOT <expression>
[IN (<column-value-list>)]
где <aggregate-function-expression>
— выражение , созданное с помощью одной из агрегатных функций,
<select-statement>
содержит предложение GROUP BY, <column-value-list>
представляет собой список обязательных значений, которые, как ожидается, будут возвращены выражением PIVOT, заключенный в кавычки и разделенный запятыми. (Вы можете использовать предложение IN для принудительного ввода последовательности вывода столбцов.)
Если есть значение event_date для RecordID и Stage:
TRANSFORM Max(Audit_Log.Event_Date)AS stage_date
SELECT Audit_Log.RecordID
FROM Audit_Log
GROUP BY Audit_Log.RecordID
PIVOT Audit_Log.Stage
Комментарии:
1. Идеально! Пользователи имели возможность добавлять отдельные этапы, поэтому возвращалось слишком много столбцов, но добавление WHERE В подзапросе к Stage означало, что я могу ограничить его формальными этапами.
2. Спасибо) Вы можете использовать инструкцию where after ИЗ Audit_Log, например: ИЗ Audit_Log WHERE Stage in (‘Stage1’, ‘Stage2’, ‘Stage3’) или после оператора PIVOT