Доступ: группировать, а затем разбивать данные на столбцы

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

Другие вопросы по тегам