2017-07-18 23 views
1

我的源數據是這樣的 - 看到圖像here如何使用Oracle基於對循環case語句

我現在想基於OFFSET_PERIOD_FROM爲PORTFOLIO_GROUP,PORTFOLIO_REGION,LIMIT_NAME的每個唯一組合來計算START_DATE_ID 。對於這個我在SELECT語句中使用這個case語句

CASE 
OFFSET_PERIOD_FROM = 0 THEN TRUNC(SYSDATE, 'Q') 
OFFSET_PERIOD_FROM = 1 THEN ADD_MONTHS(TRUNC(SYSDATE, 'Q'),3) 
OFFSET_PERIOD_FROM = 2 THEN ADD_MONTHS(TRUNC(SYSDATE, 'Q'),6) -- 6 is multiple of 3 and so on 
OFFSET_PERIOD_FROM = 3 THEN ADD_MONTHS(TRUNC(SYSDATE, 'Q'),9) 
OFFSET_PERIOD_FROM = 4 THEN ADD_MONTHS(TRUNC(SYSDATE, 'Q'),12) 
OFFSET_PERIOD_FROM = 5 THEN ADD_MONTHS(TRUNC(SYSDATE, 'Q'),15) 
END AS START_DATE_ID 

我現在的問題是OFFSET_PERIOD_FROM價值已不限於5 PORTFOLIO_GROUP,PORTFOLIO_REGION,LIMIT_NAME的每個組合。

那麼如何運行像0..MAX(OFFSET_PERIOD_FROM)爲PORTFOLIO_GROUP,PORTFOLIO_REGION的每個組合這種情況下發言,LIMIT_NAME

+2

像'ADD_MONTHS(TRUNC(SYSDATE, 'Q'),OFFSET_PERIOD_FROM * 3)'? (另) –

回答

1

如果您對ADD_MONTHS秒參數總是3*OFFSET_PERIOD_FROM,那麼你可以使用

SELECT ADD_MONTHS(TRUNC(SYSDATE, 'Q'),3*OFFSET_PERIOD_FROM) AS START_DATE_ID 
    FROM Yourtable; 

或者使用,

SELECT ADD_MONTHS(TRUNC(SYSDATE, 'Q'),b.months_to_add) AS START_DATE_ID 
     FROM Yourtable a, 
(
    select DISTINCT OFFSET_PERIOD_FROM ,months_to_add FROM Yourtable 
) b WHERE 
a.OFFSET_PERIOD_FROM = b.OFFSET_PERIOD_FROM;