假设您在数据库中有一张表,该表在9个办公地点间每天跟踪4到5次时间段的门票出现。在这些时间段中,人们可能会出现一张票(我想我们可以使用一种交易模式),或者他们可以出现很多(我见过15人,听说其他人多达50人)。基于组合密钥访问用于递增键/字段的SQL /逻辑
查询是使用Access 2013创建的,以从该表中捕获数据。这是为归档(当前日期表记录在24小时后清除)和一般分析完成的。
当前查询逻辑如下:
SELECT Format([T1]![APP_DTE],"Short Date") AS APPEAR_DTE,
T1.OFFICE, OFFCDES.OFFICE_NAME, OFFCDES.LOC_CDE, OFFCDES.LOC_NAME,
T1.APP_TIME_PER, T1.ROOM_NUM, T1.INCL_CDE, T1.ID_NUMB,
T1.ADJ_APPEAR_NUM, T2.APPEAR_CDE,
IIf([T1]![APPEAR_LOGIN_TIME] Is Null,"",[T1]![APPEAR_LOGIN_TIME]) AS LOGIN_TIME1,
IIf([T1]![OFFICE_LOGIN] Is Null,"",[T1]![OFFICE_LOGIN]) AS OFFICE_LOGIN,
IIf([T1]![DECISION_TIME] Is Null,"",[T1]![DECISION_TIME]) AS DECISION_TIME,
[T1]![ID_NUMB] & "-" & CStr([T2]![OFFICE_REP_ID]) & "-" & CStr([T1]![APP_DTE]) AS CASEKEY,
Weekday([APP_DTE]) AS NUM_DAY,
[T1]![OFFICE] & "-" & Weekday([T1]![APP_DTE]) & "-" & [T1]![APP_TIME_PER] AS OFFICE_TP_KEY, "" AS RecordKey
FROM (T1 INNER JOIN OFFCDES ON T1.OFFICE = OFFCDES.OFFICE)
INNER JOIN T2 ON T1.APPEAR_NUM = T2.APPEAR_NUM
WHERE (((Format([T1]![APP_DTE],"Short Date"))=Format(Date(),"Short Date")));
我认识到,上面的代码将需要清理的可读性,而且它可能效率不高,因为它可以。我不能赞扬这一点,我从一个同事那里继承了这一切,并且刚刚开始围绕它来包裹我的头。
查询结果包含大量的信息,其中一些(大部分)与我试图完成的操作无关。捕获所有这些信息非常重要,因为信息一旦消失就消失了。就这样,怀着:
我想要做的事:
我试图将一个键/顺序编号列会告诉我一个特定ID_NUMB了多少次在一个特定的Office发生/拉拽日期。我还没有找一个总的,而一些沿SEQ列在这里的线路:
ID_NUMB | APPEAR_NUM | OFFICE | TP | DATE | SEQ
1 | 1XZ2 | 01 | 01 | 9/7/2016 | 1
1 | 1XZ3 | 01 | 01 | 9/7/2016 | 2
2 | 3MN1 | 03 | 01 | 9/7/2016 | 1
3 | J915 | 02 | 01 | 9/7/2016 | 1
1 | 1TY1 | 01 | 01 | 9/7/2016 | 1
3 | P91D | 05 | 01 | 9/7/2016 | 1
2 | U11E | 11 | 05 | 9/7/2016 | 1
虽然我已经看了看周围,发现许多精美的编号方案,大多数都不太我要找由于计数看起来如此细致,所以完成了。
我想过把数据写入临时表,但是使用我发现的一些信息并没有导致任何类型的解决方案。同样, 我试图编写一个单独的查询,可以检索这些信息并添加序列号,在MS Answers网站上找到的the solution类型的适配。我把它放在一边,因为它看起来像是错误的方法。
我甚至玩弄了将查询写入临时表,然后让一块VBA处理顺序编号,但这种方法也没有太多。
正如我概括的那样,在列中生成序号的正确方法是什么?我很茫然。
从您的示例中不清楚'SEQ'应该如何编号。为什么最后三个条目不会递增为3,2,2?您的标准是在同一日期ID_NUMB,正确。?即使您将Office作为条件的一部分 - 最终的ID_NUMB 1仍应具有SEQ = 3,不应该吗? – dbmitch
对临时表+ VBA查询SEQ是一种非常简单的方法 - 您是否有用于创建临时表的查询示例?还是VBA?你是否反对这种方法 - 或者如果它有效,你会接受吗? – dbmitch
为了回应第一条评论@dbmitch,它实际上是几个因素的组合。你是正确的第一个应该是3,我会改变这一点。另外两个出现在不同的办公室或不同的时间(或两者)。最终可能是太粒度也许.. – dramerus