首页 > 解决方案 > Oracle 查询根据条件和分组方式连接两个表

问题描述

我有以下格式的表格,

表格1

银行 类别 月_年 贷款类型 杰出的
SI R1 1月21日 10
SI R1 1月21日 土地 50
SI R2 2月-21日 30
SI R2 MAR-21 40

表 2

银行 贷款类型
SI
SI 土地
SI
SI 宝石
SI 教育

我想使用连接/查询将表 A 和 B 转换为以下格式。表 2 中的数据(所有行)应根据 Category 和 Month_Year 添加。

银行 类别 月_年 贷款类型 杰出的
SI R1 1月21日 10
SI R1 1月21日 土地 50
SI R1 1月21日 0
SI R1 1月21日 宝石 0
SI R1 1月21日 教育 0
SI R2 2月-21日 30
SI R2 2月-21日 土地 0
SI R2 2月-21日 0
SI R2 2月-21日 宝石 0
SI R2 2月-21日 教育 0
SI R2 MAR-21 0
SI R2 MAR-21 土地 0
SI R2 MAR-21 40
SI R2 MAR-21 宝石 0
SI R2 MAR-21 教育 0

标签: sqloraclejoin

解决方案


主要是在明确选择和列之后的表中需要一个,并且在CROSS JOIN主查询中将列添加为零以表示不匹配的值,否则返回它的值,例如CategoryMonth_YearOutstanding

SELECT t2.Bank, t2.Category, t2.Month_Year, t2.Loan_Type, 
       NVL(t1.Outstanding,0) AS Outstanding
  FROM (SELECT *
          FROM (SELECT DISTINCT Category, Month_Year FROM table1) 
         CROSS JOIN table2) t2
  LEFT JOIN table1 t1
    ON t2.Category = t1.Category
   AND t2.Month_Year = t1.Month_Year
   AND t2.Loan_Type = t1.Loan_Type
 ORDER BY t2.Category, t2.Month_Year, t1.Outstanding NULLS LAST

Demo


推荐阅读