2012-10-05 54 views
0

我正在研究一個sql文件,試圖創建一個腳本,使所顯示的表中的所有數據或表中的所有數據或表中的所有數據加上3個月的數據返回。我不斷收到一個錯誤,說error 00905 missing keyword,我不明白爲什麼。SQL/ORACLE Missing關鍵字

我看着語法,它看起來都對我很好。我會在它說錯誤發生的地方放置一個標記(在第一個內部連接處)。我更改了所有表名,使其看起來更好,因爲它已經超過了語法。

任何幫助將是偉大的謝謝你。這只是代碼的一部分,但我相信它必須在這裏。

WHEN Table_typ_cde = '1' -- Pulling all data -- 
    THEN 
    INNER JOIN Table acp ON Table_oid = Table_oid 
    INNER JOIN Table loss ON Table_oid = Table_oid 
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1 
    INNER JOIN Table brnch ON Table_OID = Table_oid 
    INNER JOIN Table a ON Table_OID = Table_oid 
    INNER JOIN Table c Table_OID = Table_oid 
    INNER JOIN Table s ON Table_OID = Table_oid 
    INNER JOIN Table r ON Table_OID = Table_oid 
    INNER JOIN Table grp ON Table_oid = Table_oid 
    INNER JOIN Table on Table_id = Table_id 
    WHERE Table_ID <> 2 
WHEN Table_cde = '2' -- Pulling all data within the last 3 months along with all present data -- 
THEN 
    INNER JOIN Table acp ON Table_oid = Table_oid 
    INNER JOIN Table loss ON Table_oid = Table_oid 
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1 
    INNER JOIN Table brnch ON Table_OID = Table_oid 
    INNER JOIN Table a ON Table_OID = Table_oid 
    INNER JOIN Table c ON Table_OID = Table_oid 
    INNER JOIN Table s ON Table_OID = Table_oid 
    INNER JOIN Table r ON Table_OID = Table_oid 
    INNER JOIN Table grp ON Table_oid = Table_oid 
    INNER JOIN Table on Table_id = Table_id 
    WHERE Table_ID <> 2 
    AND df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6) 
    AND sysdate 
END           
) core 
+0

請張貼誰;樂查詢 –

回答

1

使用CASE你不能打破JOIN。我已經看到了這個在您的查詢的某些部分,

THEN 
    INNER JOIN Table acp ON Table_oid = Table_oid 
    INNER JOIN Table loss ON Table_oid = Table_oid 

這是錯誤的,必須前INNER JOIN關鍵字提供表名。

+0

所以你說,因爲我已經開始用,然後內部聯接,並和命令我不能有內部的CASE語句? – Sheldor

+0

如果我理解你的問題,那麼是的。連接的簡單語法是'SELECT * FROM tableA INNER JOIN tableB on tableA.col = tableB.col'你可以在'ON'後添加'case',但不在'JOIN'或之前添加' –

+0

如果我感到困惑,是否在我的CASE語句ON後,'ON Table_ID = Table_ID'?我想運行第一條語句,在那裏得到錯誤,然後採取第一種情況或第二種情況。我需要一個if語句來選擇要添加到第一個語句中的哪一個,並且沒有看到任何其他方式來執行此操作。 – Sheldor

0

您有兩組似乎相等的連接。然後你有一個你希望有條件應用的日期過濾器。您需要將其應用於WHERE子句中,而不是FROM。有些人喜歡這個

FROM ... INNER JOIN Table acp ON Table_oid = Table_oid 
    INNER JOIN Table loss ON Table_oid = Table_oid 
    LEFT OUTER JOIN Table veh ON Table_oid = Table_oid and Table_nbr=1 
    INNER JOIN Table brnch ON Table_OID = Table_oid 
    INNER JOIN Table a ON Table_OID = Table_oid 
    INNER JOIN Table c ON Table_OID = Table_oid 
    INNER JOIN Table s ON Table_OID = Table_oid 
    INNER JOIN Table r ON Table_OID = Table_oid 
    INNER JOIN Table grp ON Table_oid = Table_oid 
    INNER JOIN Table on Table_id = Table_id 
WHERE Table_ID <> 2 
    AND (Table_cde = '1' 
      or (Table_cde = '2' 
      and df.DATE_CREATED BETWEEN ADD_MONTHS(SYSDATE, -6) AND sysdate))