Toodete koondamine

Lehekülg uuendatud :
Lehe loomise kuupäev :

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