sql - 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 |
解决方案
主要是在明确选择和列之后的表中需要一个,并且在CROSS JOIN
主查询中将列添加为零以表示不匹配的值,否则返回它的值,例如Category
Month_Year
Outstanding
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
推荐阅读
- cordova - cordova-camera plugin - 插件使应用程序在拍照后进入纵向模式
- excel - Power Query:如何将查询与为返回的每一行运行一个查询连接
- sqlite - 随机排序
- php - 基于对缓存对象的引用查询文档
- typeorm - 基于图信息的动态关系
- visual-studio-code - 如何配置 vscode 以便它识别我的构建导入?
- android - 如何从firebase中的嵌套节点检索数据
- excel - 使用任务计划程序运行 VBS 文件以启动 Excel VBA 宏
- gridview - 在 GridView 列中显示来自不同对象的值
- angular - 如何防止 Observable 错误传播?