2017-06-01 3 views
0

Ich versuche, eine Abfrage zu schreiben, die Daten aus einer Menge von Tabellen zieht, und hat etwa 20 Gewerkschaften .. Es ist im Grunde die gleichen Informationen wiederholt ziehen, aber mit mehr Schichten jedes Mal, eine Art zu zeigen, BaumOracle SQL Unions

ich werde nicht in bekommen, warum ich das tue, aber ich möchte die letzten beiden Spalten vergleichen. Ich verwende einen Fall, um dies zu tun, und wenn ich einen Fall zu dieser Abfrage hinzufügen, dann bekomme ich den Fehler "Abfrageblock hat falsche Anzahl von Ergebnisspalten. Dies scheint zu sein, weil die endgültige Auswahl in der Union eine zusätzliche Spalte hat vergleichen Fall).

gibt es eine Möglichkeit, dies zu umgehen? ich mag nicht, den Fall in der jeweils wählen, wie dies etwa 15 weiteren Spalten hinzufügen würde, die ich nicht will.

Hoffnung das macht Sinn

Dank

+0

add Codebeispiel –

+0

wenn Es ist immer in der gleichen, als man überprüfen könnte die [Klausel] (https://stackoverflow.com/questions/12552288/sql-with-clause-example) – SomeJavaGuy

Antwort

2

eine Unterabfrage verwenden.

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 
    -- ... 
); 

Oder eine Klausel Unterabfrage Factoring verwenden:

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

Mir wurde klar, dass ich tatsächlich den Fall in jedem select verwenden musste, was mein Problem löste, aber ich nutzte dies, um meinen Code aufzuräumen, danke! – DSTL