1

何が起こっているのかわかりません。

次のようなテーブルの場合:

part  value   
BAC    102  
BS1    275  
MAV    425  
BAC    519  
BSF    653  
BAC   1072

結果は次のようになります

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 に答える