Toodete koondamine
Näidisandmed
Lihtsalt määratlege tabel, andmed, millel on ainult aastad, kuud ja huvi.
-- テーブル定義
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 @利息マスタ
Toodete koondamine
Toote liitmist on võimalik saada "eksponentsiaalse funktsiooni" ja "logaritmilise funktsiooni" liitmise teel. SQL näeb välja selline:
-- 集計
select exp(sum(log([利息]))) from @利息マスタ
-- 結果:1.73968081491318
See on vorm, mida saab realiseerida "eksponentsiaalse funktsiooni" ja "logaritmilise funktsiooni" olemuse järgi.
Esiteks on logaritmilise funktsiooni kokkuvõte valemiga "log x + log y = log(x * y)". Eksponentsiaalne valem "e logx = x**" annab "e log(x*y) =x * y", rakendades logaritmiliste funktsioonide summast saadud valemit. (x * y * ... (Osa on andmete arvust))
Null ja negatiivne kirjavahetus
Kuna logaritmiline funktsioon ei saa olla väiksem kui 0 või sellega võrdne, ilmneb tõrge, kui liitmiseesmärk sisaldab arvu, mis on väiksem kui 0 või sellega võrdne. Alla 0-aastaste numbrite mahutamiseks kasutage SQL-i järgmiselt.
-- 集計(ゼロ、負対応)
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