2017-06-01 172 views
0

我試圖寫一個查詢,從大量的表中拉取數據,並且有大約20個聯合。它基本上反覆地提取相同的信息,但是每次更多的圖層顯示一種樹Oracle SQL聯盟

我不會進入爲什麼我這樣做,但我想比較最後兩列。我正在使用一個案例來做到這一點,如果我向這個查詢添加一個案例,那麼我得到的錯誤是「查詢塊的結果列數不正確」,這似乎是因爲union中的最後一個選擇列有一個額外的列比較情況)。

有什麼辦法來解決此問題?我不希望添加的情況下均選擇,因爲這將增加約15多列,我不想。

希望這是有道理的

感謝

+0

添加代碼示例 –

+0

如果it's百達相同的比你能檢查出[with子句(https://stackoverflow.com/questions/12552288/sql-with-clause-example) – SomeJavaGuy

回答

2

使用子查詢:

SELECT col1, 
     col2, 
     CASE 
     WHEN col1 = 'somevalue' 
     THEN 'someresult' 
     ELSE 'otherresult' 
     END AS col3 
FROM (
    SELECT col1, col2 FROM table1 UNION ALL 
    SELECT col1, col2 FROM table2 UNION ALL 
    SELECT col1, col2 FROM table3 
    -- ... 
); 

或使用子查詢保條款:

WITH data (col1, col2) AS (
    SELECT col1, col2 FROM table1 UNION ALL 
    SELECT col1, col2 FROM table2 UNION ALL 
    SELECT col1, col2 FROM table3 
    -- ... 
) 
SELECT col1, 
     col2, 
     CASE 
     WHEN col1 = 'somevalue' 
     THEN 'someresult' 
     ELSE 'otherresult' 
     END AS col3 
FROM data; 
+0

我意識到我實際上在每次選擇時都需要這種情況,這使我擺脫了我的問題,但我確實使用它來整理我的代碼,謝謝! – DSTL