2015-07-19 112 views
0

表我有兩個表:如何創建或更新從選擇SQL查詢ORACLE

tabledate:

enter image description here

HOLIDAY_DATE:

enter image description here

查詢:

select (t.END_DATE - t.START_DATE) - count(c.HOLIDAY_DATE) - 2 * (to_char(t.END_DATE, 'WW') - to_char(t.START_DATE, 'WW')) as business_days, t.START_DATE,t.END_DATE 
from tabledate t 
left join 
    holiday c 
    on c.HOLIDAY_DATE between t.start_date and t.end_date and 
     to_char(c.HOLIDAY_DATE, 'Dy', 'NLS_DATE_LANGUAGE = american') not in ('Sat', 'Sun') 
group by t.end_date, t.start_date 

我試圖從此查詢更新所有business_days行或創建另一個表。

例如:

enter image description here

+0

你需要幫助編寫選擇或寫入更新? –

+0

我需要幫助寫更新 –

+0

如果您的更新將跨越每一行,我會創建一個新表,使用您的當前選擇語句(如果它工作的話)使用'create table as select ...'創建一個新表,以便繞過寫入撤消日誌。之後,放棄舊錶並將新表重命名爲舊錶。 –

回答

0

如果您需要幫助寫更新與SELECT

基本思想是:

UPDATE table_date 
SET business_days = (SELECT expression1 
        FROM table_holiday 
        WHERE conditions) 
WHERE conditions; 

COMPLETE:

UPDATE table_date t 
SET business_days = 
     SELECT 
      (t.END_DATE - t.START_DATE) 
      - count(c.HOLIDAY_DATE) 
      - 2 * (to_char(t.END_DATE, 'WW') 
      - to_char(t.START_DATE, 'WW')) as business_days 
     FROM 
      holiday c 
     WHERE 
      c.HOLIDAY_DATE between t.start_date and t.end_date 
     AND to_char(c.HOLIDAY_DATE, 'Dy', 'NLS_DATE_LANGUAGE = american') 
      not in ('Sat', 'Sun')