1

谁能帮忙,不知道怎么回事。

对于如下所示的表:

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 

除了价值是有序的,没有任何关系。

使用了@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  

结果发现该功能可以正常工作,但是当将结果放入报告中时发生了一件奇怪的事情,查询的第一个值出现错误,单击时又出现正确。另一个奇怪的事情是,如果我想要显示错误值的字段的平均值,它会显示正确的平均值,如果我点击错误的值,然后一切正常,平均值保持不变。

为什么会发生这种情况以及如何解决?

4

1 回答 1

0

根据我的评论,不像我说的那样是一个排名查询,但试试这个查询:

SELECT part, value, difference
FROM
(SELECT A.part, A.value, (SELECT Max(B.value) FROM TableName AS B WHERE B.part = A.part AND B.value < A.value) AS offset, IIf([offset] & ""="",[value],[value]-[offset]) AS difference
FROM TableName AS A
WHERE (((A.part)="BAC"))) AS B;

结果:

part    value    difference
BAC     102      102
BAC     519      417
BAC     1072     553

使用这样的查询而不是动态函数应该确保您的报告值不会改变。

于 2013-06-12T08:50:36.950 回答