2017-06-01 8 views
0

私は多くのテーブルからデータを取得し、約20個の共用体を持つクエリを作成しようとしています。基本的に同じ情報を繰り返し取得していますが、ツリーOracle SQL Unions

なぜ私はそれをやっていませんが、最後の2つの列を比較したいと思います。私はこれを行うためにケースを使用しています。このクエリにケースを追加すると、エラーが発生します。「クエリブロックには結果カラムの数が正しくありません。これは、ユニオンの最後の選択に余分なカラムがありますこれは私が望んでいない、約15以上の列を追加すると、選択しこの問題を回避するにはどのような方法があります。)

をケースを比較?私はそれぞれにケースを追加する必要はありません。

・ホープこれは理にかなって

おかげ

+0

追加コードサンプル –

+0

[条項付き](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 
    -- ... 
); 

またはサブクエリファクタリング句を使用します。it's場合オールウェイズ同じあなたがチェックアウトする可能性がより

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