我已经触发了一个表,该表基本上总结了某个ID的总价格并在任何更改后更新另一个表。现在,我需要计算不同的货币,每种货币都有其自身的价值,并且我从另一个表中获得了货币的价值。我需要将每个更新的价格乘以其货币的价值并总和整个价格。有人可以帮我吗?
触发器本身就没有货币工作正常,我已经查找了" x*y = exp(ln(x( ln(y(("公式。我正在考虑在新表中收集所有价格和货币乘数并乘以行,但我不知道该怎么做或如何使用公式!
!SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [CMS].[HoldingSum]
ON [CMS].[PartOfOneHoldingADeal]
AFTER INSERT,DELETE,UPDATE
AS
BEGIN
SET NOCOUNT ON;
declare @ChangedDataID uniqueidentifier;
if exists (select * from inserted) SET @ChangedDataID = (Select Top 1 inserted.IDHoldingADeal from inserted);
else if exists (select * from deleted) SET @ChangedDataID = (Select Top 1 deleted.IDHoldingADeal from deleted);
UPDATE CMS.HoldingADeal
SET PriceHoldingADeal = (Select Sum(PricePartOfOneHoldingADeal) total
from CMS.PartOfOneHoldingADeal
where PartOfOneHoldingADeal.IDHoldingADeal=@ChangedDataID)
where HoldingADeal.IDHoldingADeal = @ChangedDataID;
END
我希望我想更新我的表格。
您要使用的公式,如果要在不同行中的值之间制作产品,则使用它。因此,在您的情况下,它不适用。您需要将每一行转换为基本货币(?(并更新该字段。
因此,在您的情况下(不知道您的模式(,我会说类似的话:
UPDATE CMS.HoldingADeal
SET PriceHoldingADeal = (Select Sum(PricePartOfOneHoldingADeal * c.rate) total
from CMS.PartOfOneHoldingADeal p
join currencies c
on p.currencyId = c.id
where PartOfOneHoldingADeal.IDHoldingADeal=@ChangedDataID)
where HoldingADeal.IDHoldingADeal = @ChangedDataID;
考虑到您有一个转换为基本货币的费率列。如果您的货币表有所不同,您可以随身携带它。另外,您需要确保您在那里拥有所有货币,否则查询将失败。
如果您考虑不在那里拥有基本货币,请进行左JOIN而不是加入,然后将Isnull添加到您的值
isnull(PricePartOfOneHoldingADeal * c.rate,PricePartOfOneHoldingADeal)