我正在尝试使用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以将结果更改为货币类型后,会发生同样的事情。
有任何建议吗?
答案 0 :(得分: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