我在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 |
我认识到它可能是一个计数和一组的混合,可能是最小和最大计算,但无法得到正确的组合。
如果有人能帮助我解决这个问题,我将非常感激。
答案 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
以适合您的数据源。