Sql-Server
計算標準差時填充空值
我目前正在嘗試計算過去 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。標准開發。然後正確計算。