Tuotteiden yhdistäminen

Sivu päivitetty :
Sivun luontipäivämäärä :

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