2016-02-27 77 views
0

任何人都可以幫助我。我試圖從一個表中取出日期並將其插入另一個表中,然後根據日期設置,如果是週末或工作日,則插入該字符串。我已經能夠單獨做,所以試圖做到這一點一舉,我結合我的表情,現在我得到了臭名昭著的「缺少右括號SQL在嵌套的PL/SQL查詢中缺少右括號

這裏是我的塊:

INSERT INTO time (sale_day, date_type) 
    SELECT sd, dt 
    FROM (
    SELECT sale_date AS sd,(
     case 
      when dy IS null or dy='' then 'Date Missing' 
      when dy='SAT' then 'Weekend' 
      when dy='SUN' then 'Weekend' 
      else 'Weekday' END) as date_type 
      FROM (SELECT TO_CHAR((sale_date), 'DY') AS dy FROM sales) AS dt 
     FROM sales 
    ); 

謝謝提前!

+0

在大小寫之前和大括號之後移除大括號。不需要那裏 – Utsav

回答

1

您的查詢是過於複雜,沒有必要嵌套三個層次的選擇。

INSERT INTO time (sale_day, date_type) 
SELECT sale_date AS sd, 
     case 
     when sale_date IS null then 'Date Missing' 
     when TO_CHAR(sale_date, 'DY') in ('SAT', 'SUN') then 'Weekend' 
     else 'Weekday' 
     END as date_type 
FROM sales; 

不相關,但是:爲什麼要將該數據複製到新表中?查詢是非常簡單,如果你只是創建了該信息的視圖它會更有效:

create or replace view time 
as 
SELECT sale_date AS sd, 
     case 
     when sale_date IS null then 'Date Missing' 
     when TO_CHAR(sale_date, 'DY') in ('SAT', 'SUN') then 'Weekend' 
     else 'Weekday' 
     END as date_type 
FROM sales; 

這樣在time的信息始終是最新的,而不需要四處複製數據。

+0

感謝您的信息!這只是我正在上課的一個要求。試圖幫助我們理解數據倉庫/架構。 我嘗試了你提供的第一個塊,並且我正在「缺少表達式」。 – jcup505

+0

感謝@a_horse_with_no_name的塊。小錯誤,但我得到它的工作。第7行末尾有一個逗號,該列應該是sale_date而不是date_type。但是,由於它仍然幫助我很大。 – jcup505