2015-07-19 33 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')