Sql-Server

計算標準差時填充空值

  • July 25, 2021

我目前正在嘗試計算過去 12 個月我們公司銷售的產品數量的標準偏差。

我有一張表,其中包含過去一年中的每個日期,並且會不斷更新。我在我們的銷售表上使用左外連接來得出 4 列:

Year | Month | Part ID | Value

Year 和 Month 列來自日期表,Part ID 和 Value 表示來自 sales 表的總和,其中總和基於 Sales Year、Sales Month 和 Part ID 進行分組。

現在,我可以使用它來計算標準偏差。

一個簡單的

SELECT
   PART_ID,
   STDEV(VALUE) STANDARD_DEV_VALUE
FROM QUERYX
GROUP BY PART_ID

當我每個月都有給定商品的銷售時,這很好用,因為它返回 12 個月的數據。但是,如果某個零件沒有銷售,我沒有該月的數據。

例如,這是一個可能的輸出:

YEAR | MONTH | PART | VALUE
2016 | 1     |   X  | 100.0

當我需要的是:

YEAR | MONTH | PART | VALUE
2016 | 1     |   X  | 100.0
2016 | 2     |   X  | 0
2016 | 3     |   X  | 0

and so on upto a full 12 months... 

如果我沒有這個,我就沒有準確地計算標準偏差。

那麼,有人可以幫我解釋一下在沒有銷售的情況下如何填寫 Part ID 嗎?我在零件和日期之間沒有連結,所以我只能連結銷售日期。因此,我的問題。

這需要在單個查詢中完成,因為這裡還有其他數據。游標不是一種選擇。臨時表是可能的,但它必須非常快速地執行。

我能夠通過使用CROSS JOIN解決這個問題。

如果沒有 WHERE 子句與 CROSS JOIN 一起使用,SQL CROSS JOIN 生成的結果集是第一個表中的行數乘以第二個表中的行數。這種結果稱為笛卡爾積。

我在子查詢中使用它來生成包含每個零件 ID 的日期列表。這已加入到我的另一個表中,允許我將值 0 替換為 null。標准開發。然後正確計算。

引用自:https://dba.stackexchange.com/questions/177149