sql - 连接表以获取丢失的记录
问题描述
我有一个参考表
NAV_ID int
NAV_FRQ varchar(20)
价值观
1 DAILY
2 WEEKLY
3 MONTHLY
和一个数据表
CUST_ID varchar(10)
NAV_FRQ varchar(20)
NAV_VALUE INT
价值观
C1 DAILY 10
C2 DAILY 20
C3 WEEKLY 40
c3 MONTHLY 80
我正在尝试获得以下输出
C1 DAILY 10
C1 WEEKLY NULL
C1 MONTHLY NULL
C2 DAILY 20
C2 WEEKLY Null
C2 MONTHLY NULL
C3 DAILY NULL
C3 WEEKLY 40
C3 MONTHLY 80
我尝试了以下查询,但这不起作用,
select a.CUST_ID
,b.NAV_FRQ
,CASE WHEN a.NAV_FRQ = b.NAV_FRQ THEN b.NAV_VALUE ELSE NULL END AS NAV_VALUE
from table_a a cross join table_b b
解决方案
您需要到CROSS JOIN
您的客户表(我假设您有,但没有向我们提供示例),然后LEFT JOIN
. 因此:
SELECT C.CUST_ID,
RT.NAV_FRQ,
DT.NAV_VALUE
FROM Customer C
CROSS JOIN ReferenceTable RT
LEFT JOIN DataTable DT ON C.CUST_ID = DT.Cust_ID
AND RT.NAV_FRQ = DT.NAV_FRQ;
如果您没有客户表,那么我建议您制作一个,因为DataTable
如果不组合多个列,您的表将不会具有唯一值(这会问一个问题,客户的信息存储在哪里?)并保留您的数据结构处于非标准化状态。
推荐阅读
- winforms - 在 Winforms ReportViewer 中为当前页码添加偏移量
- vue.js - 更改 Axios 默认参数在 Vuex 操作事件上未更改
- node.js - 如何在 Heroku 上设置环境变量?
- html - 突出显示垫行单元格的全宽
- javascript - 在 react js 中使用 ant design 上传图片
- python - 如何计算Django中一个对象的多个字段的值?
- lightningchart - LineSeries-onMouseClick的麻烦
- scala - 计算给定列集的不同列值
- wordpress - Worpress 上的 icomoon.ttf 显示 404 和较长的响应时间减慢了我的网站
- php - Concrete5 MySQL 查询问题