我有一個資料倉庫的開始,它包含(在其他表中)
- 具有 200 年價值日期的日期表可以加入,因此無需構建“動態”日期表
- dbo.Dim_Items(見下文)
| 專案編號 | 質量保證 | 生效日期 | 截止日期 | 是當前記錄 |
|---|---|---|---|---|
| 372620 | 24 | 2021-12-11 05:34:09.000 | 9999-12-31 00:00:00.000 | 1 |
| 372620 | 11 | 2021-12-09 05:34:11.000 | 2021-12-11 05:34:09.000 | 0 |
| 372620 | 9 | 2021-12-07 05:34:20.000 | 2021-12-09 05:34:11.000 | 0 |
我想找到 2021-12-07 和今天之間每一天的 QOH(假設 2021-12-13,為簡潔起見),所以我的結果看起來像這樣
| 日期 | 專案編號 | 質量保證 |
|---|---|---|
| 2021-12-07 | 372620 | 9 |
| 2021-12-08 | 372620 | 9 |
| 2021-12-09 | 372620 | 11 |
| 2021-12-10 | 372620 | 11 |
| 2021-12-11 | 372620 | 24 |
| 2021-12-12 | 372620 | 24 |
| 2021-12-13 | 372620 | 24 |
我最接近的是下面的查詢,但它沒有按照我想要的方式作業(注意與 Items 維度不相符的日期上的零)
DECLARE @START_DATE date,
@END_DATE date
SET @START_DATE = '20211207'
SET @END_DATE = GETDATE() -- '20211213'
SELECT CAL.TheDate,
I.ItemNumber,
I.QOH
FROM dbo.Dim_Calendar CAL
LEFT OUTER JOIN dbo.Dim_Items I ON CAL.TheDate >= CAST(I.EffectiveDate as date)
AND CAL.TheDate <= CAST(I.EffectiveDate as date)
AND I.ItemNumber = 372620
WHERE CAL.TheDate >= @START_DATE
AND CAL.TheDate <= @END_DATE
ORDER BY CAL.TheDate,
I.ItemNumber
| 日期 | 專案編號 | 質量保證 |
|---|---|---|
| 2021-12-07 | 372620 | 9 |
| 2021-12-08 | 372620 | 0 |
| 2021-12-09 | 372620 | 11 |
| 2021-12-10 | 372620 | 0 |
| 2021-12-11 | 372620 | 24 |
| 2021-12-12 | 372620 | 0 |
| 2021-12-13 | 372620 | 0 |
作為一個整體,我是資料倉庫的新手,所以我不確定如何正確構建這個查詢。
uj5u.com熱心網友回復:
DBFIDDLE
DECLARE @START_DATE date,
@END_DATE date
SET @START_DATE = '20211207'
SET @END_DATE = GETDATE() -- '20211213'
SELECT
TheDate,
I.Itemnumber,
I.QOH
FROM dbo.Dim_Calendar CAL
LEFT JOIN dbo.Dim_Items I On CAL.TheDate BETWEEN CAST(I.EffectiveDate as DATE)
AND I.ExpirationDate
AND I.Itemnumber = 372620
WHERE CAL.TheDate >= @START_DATE
AND CAL.TheDate <= @END_DATE
ORDER BY CAL.TheDate,
I.ItemNumber
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/419564.html
標籤:
