Как рассчитать сумму столбца с множителями - PullRequest
0 голосов
/ 21 мая 2019

Я создал триггер для таблицы, который в основном суммирует общую стоимость определенного идентификатора и обновляет другую таблицу после любого изменения.Теперь мне нужно рассчитывать в разных валютах, и у каждой есть свое значение, и я получил CurrencyID и его значение из другой таблицы.Мне нужно умножить каждую обновленную цену на стоимость ее валюты и суммировать всю цену.Может кто-нибудь помочь мне с этим, пожалуйста?

Триггер сам по себе работает нормально без валют, и я уже посмотрел формулу "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

Я ожидаю выходабыть одной общей ценой (вероятно, bigint), которой я хочу обновить свою таблицу.

1 Ответ

0 голосов
/ 21 мая 2019

Формула, которую вы хотите использовать, она используется, если вы хотите сделать продукт между значениями в разных строках.Так что в вашем случае это не относится.Вам нужно сделать для каждой строки преобразование в базовую валюту (?) И обновить поле.

Так что в вашем случае (не зная вашей схемы), я бы сказал что-то вроде:

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;

Учитывая, что у вас есть столбец курсов, который переводится в вашу базовую валюту.Вы можете возиться с ним в случае, если ваша таблица валют отличается.Также вам нужно убедиться, что у вас есть все валюты, иначе запрос не будет выполнен.

Если вы считаете, что там нет базовой валюты, тогда сделайте левое соединение вместо объединения и добавьте isnull вваше значение

isnull(PricePartOfOneHoldingADeal * c.rate,PricePartOfOneHoldingADeal)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...