You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库:同表多条件查询结果合并为多列的实现问题

解决Oracle中合并同表两个查询为同一行不同列的问题

嘿,我懂你现在的困扰啦!你想针对cons.GM表的两个不同条件统计数值,把结果放在同一行的不同列里,但用UNION之后结果却分成了两行(在DBVisualizer里就显示成了不同标签页),对吧?

先说说原SQL的问题

你用的UNION是用来合并两个查询的行结果的,它会把两个统计值分别放在不同的行里,自然就没法在同一行显示两列数据啦。

方案一:用子查询作为列(简单直观)

这种写法把每个统计查询当作一个单独的列,借助Oracle的DUAL虚表来返回一行结果:

SELECT
  (SELECT COUNT(DISTINCT CODE) FROM cons.GM WHERE POLICY='NR' AND PCT IS NULL) AS Comp_PCT,
  (SELECT COUNT(DISTINCT CODE) FROM cons.GM WHERE POLICY='NR' AND DTY IS NULL) AS Comp_DTY
FROM DUAL;

执行这个语句后,你就能看到Comp_PCT和Comp_DTY两个列在同一行显示各自的统计值了。

方案二:用CASE表达式+聚合函数(更高效)

如果你的cons.GM表数据量很大,上面的方案会扫描两次表,效率偏低。这种方案只需要扫描一次表,通过条件判断来分别统计:

SELECT
  COUNT(DISTINCT CASE WHEN PCT IS NULL THEN CODE END) AS Comp_PCT,
  COUNT(DISTINCT CASE WHEN DTY IS NULL THEN CODE END) AS Comp_DTY
FROM cons.GM
WHERE POLICY='NR';

原理是先过滤出POLICY='NR'的所有行,然后对每一行判断:

  • 如果PCT为空,就保留CODE,否则返回NULL,最后统计这些非空CODE的不同值数量,得到Comp_PCT
  • 同理处理DTY为空的情况,得到Comp_DTY

两种方案都能解决你的问题,小表用方案一就行,大表优先选方案二哦!

内容的提问来源于stack exchange,提问作者CDZ30

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:47:32