我正在根據項目的預測預算查詢「未來幾個月」。通過返回比預期更多的行連接
基本上,我將最後一次預測日期(START_DATE)和我希望進行預測的未來日期(END_DATE),因此我需要在幾個月之間填入所有內容。
通過一些研究,我發現「CONNECT BY」可以幫助很多。
Simplyfying它,查詢看起來是這樣的:
SELECT TO_CHAR (ADD_MONTHS (START_DATE, LEVEL - 1), 'fmMonth')
FROM (SELECT PROJECT_ID, FORECAST_VALUE, START_DATE, END_DATE
FROM PROJECTS
WHERE PROJECT_ID = 001)
CONNECT BY LEVEL <=
MONTHS_BETWEEN (TRUNC (END_DATE, 'MM'),
TRUNC (START_DATE, 'MM')
)
* +1
選擇一個項目的時候,但是選擇幾個或全部項目/行時,查詢工作得很好,查詢分解,並返回許多比更多的行預期。
源數據是這個樣子:
PROJECT_ID | FORECAST_VALUE | START_DATE | END_DATE
-----------+----------------+------------+-----------
001 | 100 | 2017-01-01 | 2017-03-01
002 | 200 | 2017-01-01 | 2017-05-01
003 | 200 | 2017-10-01 | 2018-01-01
我希望看到會是這樣的
PROJECT_ID | FORECAST_VALUE | FORECAST_YEAR | FORECAST_MONTH
-----------+----------------+---------------+-----------
001 | 100 | 2017 | JANUARY
001 | 100 | 2017 | FEBRUARY
001 | 100 | 2017 | MARCH
002 | 200 | 2017 | JANUARY
002 | 200 | 2017 | FEBRUARY
002 | 200 | 2017 | MARCH
002 | 200 | 2017 | APRIL
002 | 200 | 2017 | MAY
003 | 200 | 2017 | OCTOBER
003 | 200 | 2017 | NOVEMBER
003 | 200 | 2017 | DECEMBER
003 | 200 | 2018 | JANUARY
但是我得到一噸多的月和年超出預期。
我該如何解決這個問題?
謝謝!
聽起來像是簡單的數據緻密化的問題。始終發佈源數據和期望結果的樣本。簡單的說。這裏是我有什麼,這裏是我所期望的輸出,這裏是我寫的查詢。 –
@NicholasKrasnov謝謝!只是將其添加到我的問題。 – dkg
和您正在運行的Oracle版本是什麼? –