表格如下:
part value
BAC 102
BS1 275
MAV 425
BAC 519
BSF 653
BAC 1072
结果将是:
部分BAC
part value difference
BAC 102 102
BAC 519 417
BAC 1072 553
除了值之外没有任何关系。
使用了以下SQL语句,但结果没用,因为结果不按部分过滤为“WHERE”要求,并且第一行应该具有差值102,但它是空的。
SELECT ABS(T2.value - T1.value) AS Difference, T1.Part,T1.value,
FROM table AS T1 RIGHT JOIN table AS T2 ON
T2.report = T1.Report+ 1
WHERE (((T1.part)=[Forms]![Parts]![Part]));
更新:
我添加了@Tom Collins的功能
Function GetDiff(CurrPart As String, CurrValue As Long) As Long
Static LastPart As String
Static LastValue As Long
If CurrPart <> LastPart Then
LastValue = 0
LastPart = CurrPart
End If
If LastValue = CurrValue Then
GetDiff = CurrValue
Else
GetDiff = CurrValue - LastValue
LastValue = CurrValue
End If
End Function
结论:
事实证明该函数可以正常工作,但是当结果放在报表中时,它会发生一个奇怪的事情,查询的第一个值出错了,当点击它时它就出现了。另外一个奇怪的事情是,如果我想要显示错误值的字段的平均值,它会显示正确的平均值,如果我点击错误的值,则转向正常,平均值保持不变。
问题已得到解答,剩下的问题是另一个问题。
谢谢@Tom Collins。
答案 0 :(得分:0)
SELECT parts.id,
parts.part,
parts.value1,
[value1] - Nz(Dmax("value1", "parts", "(value1 <" & [value1] &
") and (part = '" & [part]
&
"')"), 0) AS Diff
FROM parts;
DMax 函数返回前一个值(小于当前值的最大值,以及该部分相同的位置)和 Nz 函数如果没有先前的值则返回0。