Tuotteiden yhdistäminen
Esimerkkitiedot
Määritä vain taulukko, tiedot, joilla on vain vuosia, kuukausia ja korkoa.
-- テーブル定義
declare @利息マスタ table
(
年月 nvarchar(6)
,利息 decimal(4, 2)
)
-- サンプルデータ挿入
insert @利息マスタ
select N'201501', 1.05
union all select N'201502', 1.03
union all select N'201503', 1.02
union all select N'201504', 1.10
union all select N'201505', 1.02
union all select N'201506', 1.06
union all select N'201507', 1.07
union all select N'201508', 1.04
union all select N'201509', 1.06
union all select N'201510', 1.07
union all select N'201511', 1.03
union all select N'201512', 1.02
-- 確認
select * from @利息マスタ
Tuotteiden koostaminen
Tuotteen aggregointi voidaan saada yhdistämällä "eksponentiaalinen funktio" ja "logaritminen funktio". SQL näyttää tältä:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
Tämä on muoto, joka voidaan toteuttaa "eksponentiaalisen funktion" ja "logaritmisen toiminnon" luonteen mukaan.
Ensinnäkin logaritmisen funktion yhteenveto on kaavan "log x + log y = log(x * y)". Eksponentiaalinen kaava "e logx = x**" antaa "e log(x*y) =x * y" soveltamalla logaritmifunktioiden summalla saatua kaavaa. (x * y * ... (-osa on tietojen määrä)
Nolla ja negatiivinen kirjeenvaihto
Koska logaritminen funktio ei voi olla pienempi tai yhtä suuri kuin 0, virhe ilmenee, jos koostekohde sisältää luvun, joka on pienempi tai yhtä suuri kuin 0. Jos haluat sijoittaa alle 0-numerot, käytä SQL:ää seuraavasti:
-- 集計(ゼロ、負対応)
select
case
when min(abs([利息])) = 0 then 0
else
exp(sum(log(abs(nullif([利息], 0)))))
* round(0.5 - count(nullif(sign(sign([利息]) + 0.5), 1)) % 2, 0)
end as [利息合計]
from @利息マスタ
-- 結果:1.73968081491318