我正在尝试寻找将值分配给表中记录的最佳方法,该表以值1开始并逐步前进值1.该表包含按日期记录的记录,其中有多条记录每个日期。我需要一个解决方案(可能是一个循环),它将按日期进行,并为每个从第一个开始插入一个等级编号,并为每个记录增加一个。一旦确定了新的日期,我需要再次从值1开始。例如,如果我有4个字段'Date','User','User ID',并且想要使用此逻辑更新字段'sequence',则我的代码将(1)按日期对所有记录进行分组,( 2)按用户ID排序,(3)在“序列”字段中显示以下结果:
Date | User | User ID | Sequence
4 September | Mary | 09 | 1
4 September | Bob | 58 | 2
4 September | Dave | 59 | 3
5 September | Drew | 32 | 1
5 September | Steve | 35 | 2
6 September | Mary | 09 | 1
我意识到我需要每天进行某种类型的循环,但需要帮助才能开始。
答案 0 :(得分:3)
如果您绝对必须存储序列值,请使用带有UPDATE
表达式的DCount
查询来计算序列。
UPDATE tblMarchese
SET [Sequence] = DCount(
'*',
'tblMarchese',
'[Date]=' & Format([Date],'\#yyyy-m-d\#') &
' AND [User ID] <= ' & [User ID]
);
该查询更简单,并且比打开和移动记录集以更新存储的 Sequence 值要快得多。
然而,重新考虑您是否必须首先存储序列值。您可以在需要查看它们时使用SELECT
查询来计算它们,这样可以确保您看到的 Sequence 值始终与基础数据的最新更改保持一致。 / p>
将您的示例数据与下面的查询一起使用,这是我在Access 2010中的结果集:
Date User User ID Sequence
----------- ------ ------- --------
4 September Mary 9 1
4 September Bob 58 2
4 September Dave 59 3
5 September Drew 32 1
5 September Steve 35 2
6 September Mary 9 1
SELECT
m1.Date,
m1.User,
m1.[User ID],
(
SELECT Count(*)
FROM tblMarchese AS m2
WHERE
m2.Date = m1.Date
AND m2.[User ID] <= m1.[User ID]
) AS [Sequence]
FROM tblMarchese AS m1
ORDER BY m1.Date, m1.[User ID];
答案 1 :(得分:0)
我找到了!无需继续寻找。以下循环例程正是我解决此问题所需要的。将其应用于上面的“通用/理论”示例,您可以看到上面的“序列”字段如何通过以下例程中的字段“ID_Event”反映出来。循环检查先前的记录,如果它具有相同的日期('生效日期'),它将1添加到字段'ID_Event'
Private Sub Comando197_Click()
Dim sql As String
Dim varEffective_Date As Date
Dim NumberOfTimes
Dim varID_Event As Integer
sql = "select ID_Event,ID_ValueAddWaste,Effective_Date,ValueAddType,ValueAddType02 from tblPerformanceTrackingMaster03 where tblPerformanceTrackingMaster03.[ID_Event]=0 order by ID"
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
rs.Open sql, CurrentProject.Connection, adOpenDynamic, adLockPessimistic
Dim counter As Integer
counter = 1
Do While Not rs.EOF
If counter > 1 Then
If varEffective_Date = rs!Effective_date Then
rs!ID_Event = varID_Event + 1
End If
End If
varEffective_Date = rs!Effective_date
varID_Event = rs!ID_Event
rs.MoveNext
counter = counter + 1
Loop
rs.Close
Set rs = Nothing
End Sub