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

Oracle按两列分组并展示另一表所有第二列值的查询问题

调整查询以获取所有COLUMN1与Table1数据的组合结果

你的原查询只返回了Table1和Table2有匹配的组合,而且没有覆盖每个COLUMN1(1、2)和Table1所有数据的全量组合。要得到预期结果,我们需要先构建所有COLUMN1取值与Table1数据的笛卡尔积,再左连接Table2进行聚合。

调整后的SQL语句

-- 先提取Table2中所有唯一的COLUMN1值,再和Table1生成全量组合
WITH DistinctColumn1 AS (
    SELECT DISTINCT COLUMN1 FROM Table2
)
SELECT 
    dc1.COLUMN1,
    t1.column1 AS COLUMN2,
    COALESCE(SUM(t2.COLUMN3), 0) AS COLUMN3
FROM DistinctColumn1 dc1
CROSS JOIN Table1 t1
LEFT JOIN Table2 t2 
    ON dc1.COLUMN1 = t2.COLUMN1 
    AND t1.column1 = t2.column2
GROUP BY dc1.COLUMN1, t1.column1
ORDER BY dc1.COLUMN1, t1.column1;

关键逻辑说明

  1. DistinctColumn1 CTE:提取Table2中所有不重复的COLUMN1值(这里是1和2),确保我们覆盖所有需要的分组维度。
  2. CROSS JOIN Table1:把每个COLUMN1值和Table1的每一行数据做笛卡尔积,直接生成预期结果的完整行框架(比如1对应data1-data5,2对应data1-data5)。
  3. LEFT JOIN Table2:关联到Table2时,同时匹配COLUMN1和data值,没有匹配的记录会返回NULL。
  4. COALESCE(SUM(t2.COLUMN3), 0):将SUM结果为NULL的情况替换为0,完全符合你预期里的空值显示需求。
  5. 最后按COLUMN1和Table1的column1排序,和你给出的预期结果顺序完全一致。

执行这个查询后,就能得到你想要的10行全量组合结果,所有无匹配的COLUMN3都会显示为0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:07:14