2

在庫データベースに2つの値があります。1つはQtyOnHand(float)で、もう1つはそのアイテムのすべての在庫トランザクションの計算です(SUM(TransQty)transQtyもfloatであると考えてください)。問題は、不明な理由で時間の経過とともに、これらの値の一部が同期しなくなることです。だから今、私はそれらをきれいにしようとしています。

基本的に、私はQtyOnHand(正確であると宣言しています)を取得し、そこからトランザクションの合計を差し引きます。次に、差異のトランザクションに修正エントリを作成します。これは、「10進数のほこり」がたくさんある数値に到達するまではうまく機能します。0また、実際の値がに近い場合でも、floatが表示されるよう0.0000000000000000237です。

これが私が修正するのに苦労しているいくつかのデータです。

サンプルデータ

科学的記数法の項目は私に問題を与えています。アイテムPLXL-105-Hを示す-18、-18を示す行でさえ、1%の不一致の範囲外の値のみを返すため、正確に表示されません。私は完全にTSQLで作業してきましたが、C#プログラムからの値を操作するのに役立ちますか?

だから、ここに私の質問があります:これらの数字をどのように扱うべきですか?それらをDECIMAL(38,38)に変換しようとしましたが、算術オーバーフローが発生します。違いを表す正確な値を取得し、その値を使用してバランスを取る必要があります。

4

1 に答える 1

1

どのようにエントリーしようとしていますか?

次のようなことをします:

with to_update as (
     select itemNumber, QtyOnHand, TransBal
     from t
)
update tb_table
    set offset = TransBal - QtyOnHand
    from to_update
    where to_udpate.itemNumber = tb_table.itemNumber

トリックを行う必要があります。

データベースからデータを取り出して操作し、元に戻そうとしているようです。データベース内にとどまっている場合は、値が文字列に変換されないため、問題は発生しません。

ちなみに、10進変換には、decimal(38,19)か何かを使うべきです。スケールパラメータは小数点の右側の桁数用であるため、38に設定すると、-1から1までの数値のみが表されます。

于 2012-09-27T16:02:37.143 に答える