2017-08-30 34 views
0

我有簡單的INSERT這樣的:INSERT INTO表不同的日期(DD-1,毫米基於條件)

INSERT INTO table_1 
(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, g.value 
FROM temp t, table_2 g 
WHERE t.condition = g.condition 

在TABLE_1我有基於上述條件插入幾千的值。但現在我需要做的INSERT在TABLE_1以下這個條件:

  1. 如果g.value '20 .03.2017' 然後插入'19 .07.2017' - > DD - 1 g.value,毫米 - 1這個月。
  2. 如果g.value '20 .07.2017'則從當前月的g.value,mm - 1插入'19。077.2017' - > dd - 1。
  3. 如果g.value '03 .08.2017'則從當前月的g.value,mm插入'02 .08.2017' - > dd - 1。
  4. 如果g.value '03 .03.2017'則從當前月份的g.value,mm插入'02 .08.2017' - > dd - 1。

結論是,日總是-1,月份是-1如果日< 4和當前月如果日=> 4。格式爲dd.mm.yyyy。

任何想法如何做到這一點?

此致敬禮。

+0

我會將select語句放在遊標中。然後使用記錄循環遊標。當循環時,你可以做一個插入和修改值,如果你喜歡。 – Tenzin

+0

查看CASE報表: https://www.techonthenet.com/oracle/functions/case.php –

回答

1

您需要使用CASE

INSERT INTO table_1(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    CASE WHEN EXTRACT(day FROM g.value) < 4 THEN -- create the first type of date from g.value 
     ELSE -- create the second type of date from g.value 
    END 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 

,或者您可以使用UNION ALL以及

INSERT INTO table_1(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    -- create the first type of date from g.value 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 
WHERE EXTRACT(day FROM g.value) < 4 
    UNION ALL 
SELECT 'row1', t.value, 
    -- create the second type of date from g.value 
FROM temp t 
JOIN table_2 g on t.condition = g.condition 
WHERE EXTRACT(day FROM g.value) >= 4 
+0

太棒了!首先解決方案解決了我的問題 – MikeL

0

該解決方案適用於我:

INSERT INTO table_1 
(FIX_DATA, VAR_DATA, DATE) 
SELECT 'row1', t.value, 
    CASE WHEN EXTRACT(day FROM g.value) < 4 THEN EXTRACT (day FROM g.value-1) || '.' || EXTRACT (month FROM sysdate) || '.' || EXTRACT (year FROM sysdate) 
    ELSE EXTRACT (day FROM g.value-1) || '.' || EXTRACT (month FROM sysdate-1) || '.' || EXTRACT (year FROM sysdate) END 
FROM temp t, table_2 g 
WHERE t.condition = g.condition 

謝謝大家,BR。