【问题标题】:Oracle SQL UnionsOracle SQL 联合
【发布时间】:2017-06-01 08:51:22
【问题描述】:

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

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

有没有办法解决这个问题?我不想为每个选择添加案例,因为这会增加大约 15 个我不想要的列。

希望这是有道理的。

谢谢

【问题讨论】:

  • 添加代码示例
  • 如果一切都一样,您可以查看with clause

标签: sql oracle join unions


【解决方案1】:

使用子查询:

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;

【讨论】:

  • 我意识到我实际上在每个选择中都需要这个案例,这解决了我的问题,但我确实用它来整理我的代码,谢谢!
猜你喜欢
  • 2023-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-21
  • 1970-01-01
  • 1970-01-01
  • 2020-03-13
  • 2012-03-03
  • 1970-01-01
相关资源
最近更新 更多