访问:分组依次将数据拆分为列

时间:2018-01-24 13:51:03

标签: ms-access group-by ms-access-2016

我在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 个答案:

答案 0 :(得分:0)

为了清晰起见,我喜欢使用两步过程,但如果您愿意,可以将它们组合成一个查询。

我将表命名为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执行简单查询,以查找第二个查询中需要容纳的最大索引。

答案 1 :(得分:0)

除非我误解了您的要求,否则使用交叉表查询应该可以帮到您:

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以适合您的数据源。