-1

現在、SQL Server ステートメントで標準偏差を計算するときに問題に直面しています。

私の問題: 2 つのテーブルがあります。

T1:

Reg_Month
---------   
1
2
3
...

T2:

Product  Month   Consumption
-------------------------------
ProdA      1       200
ProdB      1        10
ProdA      1       300
ProdC      2       100
ProdA      2       200
...

今、私が欲しいのは、1年間のSTDEVを計算するために、次のようなものです:

Reg_Month   Product   Month   Sum
---------------------------------
   1        ProdA       1     500
   1        ProdB       1      10
   1        ProdC       1       0
   2        ProdA       2     200
   2        ProdB       2       0
   2        ProdC       2       0

したがって、このテーブルを設定する必要はありませんが、各製品の「合計」列の STDEV と AVG を計算する必要があります。問題は、NULL を含めることです。

これにより、ProdA に必要なテーブルが得られますが、消費がない場合は常に NULLS になります。

SELECT * 
FROM T1
FULL JOIN (SELECT Product, Month, SUM(Consumption) AS Sum, 
           FROM T2
           WHERE (Product = 'ProdA')
           GROUP BY Month, Product) sub ON (T1.Reg_Month = T2.Month)`

これにより、STDEVが得られます。

SELECT Stdev(Sum) 
FROM 
    (SELECT * 
     FROM T1
     FULL JOIN (SELECT Product, Month, SUM(Consumption) AS Sum, 
                FROM T2
                WHERE (Product = 'ProdA')
                GROUP BY Month, Product) sub ON (T1.Reg_Month = T2.Month)) sub 
WHERE Product = 'ProdA'`

しかし、問題は、NULL (結合のために表示される) が無視されるため、消費がなかった月がある場合、1 年全体の正しい STDEV が得られないことです。

私のアプローチ:

ISNULL():

SELECT Stdev(Sum) 
FROM 
    (SELECT * 
     FROM T1
     FULL JOIN (SELECT Product, Month, ISNULL(SUM(Consumption), 0) AS Sum, 
                FROM T2
                WHERE (Product = 'ProdA')
                GROUP BY Month, Product) sub ON (T1.Reg_Month = T2.Month)) sub 
WHERE Product = 'ProdA'`

動作しません (結合後に null が生成されるためでしょうか?)

CASE:

SELECT Stdev(Sum) 
FROM 
    (SELECT * 
     FROM T1
     FULL JOIN (SELECT Product, Month, CASE WHEN SUM(Consumption) IS NULL THEN 0 ELSE Sum(Consumption) END AS Sum, 
                FROM T2
                WHERE (Product = 'ProdA')
                GROUP BY Month, Product) sub ON (T1.Reg_Month = T2.Month)) sub 
WHERE Product = 'ProdA'

動かない(多分同じ理由)

私の例を適切に説明できたことを願っています。では、STDEV で適切な結果を得るにはどうすればよいか分かりますか?

ご意見をお待ちしております。

どうもありがとう、

クレメンス

4

1 に答える 1