Доступ: группировать, а затем разбивать данные на столбцы
У меня есть следующие данные в Access. Он представляет собой оригинальный запрос, отправляемый кому-то. Если запрос не выполняется, он перезапускается (столько раз, сколько требуется для его заполнения, я думаю, что максимальное значение составляет около 5).
|REQUEST #| EMAIL_ID | EMAIL_SUBJECT | DATE_SENT|
|---------|----------|-----------------------|----------|
| 1 | 1 | 1- blah blah | 01-01-18 |
| 1 | 3 | 1- blah blah | 01-06-18 |
| 2 | 75 | 2- this | 01-07-18 |
| 2 | 100 | 2- this | 01-10-18 |
| 2 | 102 | 2- this | 01-14-18 |
В этом примере электронные письма 3, 100 и 102 являются повторными запусками. Я бы хотел, чтобы запрос GROUP BY # содержал в качестве столбцов исходную дату, количество повторных запусков, первую дату повторного запуска, вторую дату повторного запуска и т. Д.
Это будет выглядеть так:
| REQUEST_# | DATE_SENT_ORI | #_OF_REL | REL1_DATE | REL2_DATE | ETC... |
|-----------|---------------|----------|-----------|------------|---------|
| 1 | 01-01-18 | 1 | 01-06-18 | null | null |
| 2 | 01-07-18 | 2 | 01-10-18 | 01-14-18 | null |
Я признаю, что это, вероятно, будет какое-то сочетание счета и группы и, возможно, вычислений минимума и максимума, но не может получить правильную комбинацию.
Я был бы очень признателен, если бы кто-то мог помочь мне разобраться с этим.
2 ответа
Если я неправильно понял ваше требование, использование перекрестной таблицы должно помочь вам в этом:
TRANSFORM
First(DATE_SENT) AS DS
SELECT
[REQUEST_#], Min(DATE_SENT) AS DATE_SENT_ORI, Count(EMAIL_ID) AS [#_OF_REL]
FROM
myTable
GROUP BY
[REQUEST_#]
PIVOT
DATE_SENT
Очевидно, меняется mytable
в соответствии с вашим источником данных.
Мне нравится использовать двухэтапный процесс для ясности, хотя вы можете объединить их в один запрос, если хотите.
Я назвал таблицу Sample и использовал этот запрос для получения индекса каждого запроса - это дает число от 1(первый запрос) до n(конечный запрос). Я сохранил это как Sample_Indexed
SELECT Sample.[REQUEST #], Sample.EMAIL_ID, Sample.EMAIL_SUBJECT, Sample.DATE_SENT, (select count(*) from Sample T where T.[Request #]=Sample.[Request #] and T.Date_Sent<=Sample.Date_Sent) AS [Index]
FROM Sample;
Затем я сделал второй запрос, чтобы переместить данные в столбцы:
SELECT Sample_Indexed.[REQUEST #], Sample_Indexed.EMAIL_SUBJECT, Max([Index]) AS [Count], Max(IIf([index]=1,[Date_Sent])) AS Date_1, Max(IIf([index]=2,[Date_Sent])) AS Date_2, Max(IIf([index]=3,[Date_Sent])) AS Date_3
FROM Sample_Indexed
GROUP BY Sample_Indexed.[REQUEST #], Sample_Indexed.EMAIL_SUBJECT;
Во втором запросе вы можете добавить столько столбцов Date_N, сколько необходимо. Вы также можете выполнить простой запрос из Sample_Index, чтобы найти максимальный индекс, который вам нужно разместить во втором запросе.