Oracle SQL 工会

Oracle SQL Unions

我正在尝试编写一个从很多表中提取数据的查询,并且有大约 20 个联合。它基本上是重复提取相同的信息,但每次都有更多的层,以显示一种树

我不会解释为什么要这样做,但我想比较最后两列。我正在使用一个案例来执行此操作,如果我向此查询添加一个案例,则会收到错误“查询块的结果列数不正确。这似乎是因为联合中的最终 select 有一个额外的列(比较案例)。

有什么办法可以解决这个问题吗?我不想将大小写添加到每个 select,因为这会添加大约 15 个我不想要的列。

希望这是有道理的。

谢谢

使用子查询:

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;