0

TransactionDetail テーブルと SalesDetail テーブルのフィールドを使用した数式に基づいて、TransactionDetail テーブルに AmountOwed の値を設定しようとしています。内部の Select クエリが機能し、期待値を返します。使用中のフィールドは次のタイプです。

TotalTender - money
PriceEntered - money
TaxRate - float

----- SQL クエリ -----

Update [POSDatabase].[dbo].[TransactionDetail]

    Set AmountOwed =  
    (Select (TotalTender - (Select sum(PriceEntered+(PriceEntered*TaxRate*.01)) 
                            from POSDB.dbo.SalesDetail as Sales 
                            where Sales.TransactionID = Trans.ID))

    From POSDB.dbo.TransactionDetail as Trans

    Where TransactionDetail.ID = Trans.ID)

    Where ID = 4207

----- SQL クエリの終了 -----

このクエリを実行すると、1 行に影響したと表示されますが、テーブルを表示しようとすると (Select * from Table)、クエリがスピンするだけです。奇妙なことに、下にスクロールすると、このクエリで識別された ID よりも 5 ~ 6 少ないすべてのレコードが表示されます。

データ型の不一致があるのではないかと思いましたが、結果をお金の型に変更するために CONVERT または CAST が実行された後も同じことが起こります。

何か提案はありますか?

4

1 に答える 1

1

あなたの質問に従うのに苦労していますが、正しく理解していれば、このようなことがうまくいくと思います。

;with s (TransactionID, total) as (
    select  TransactionID, sum(PriceEntered+(PriceEntered*TaxRate*.01))
    from   [POSDB].[dbo].[SalesDetail]
    group by TransactionID
)
update  td
set     amountOwed = td.TotalTendered-s.total 
from    [POSDatabase].[dbo].[TransactionDetail] td 
    join  s on td.id = s.TransactionID
where   td.id = 4207
于 2013-01-25T21:00:55.207 に答える