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 行,但是当我尝试查看表(从表中选择 *)时,查询只是旋转。奇怪的是,如果我向下滚动,它显示的所有记录最多比此查询中标识的 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 回答