首页 > 解决方案 > 在日期时间创建的记录上连接两个记录表 - SQL

问题描述

我正在尝试加入(完全外部联接)两个包含客户状态信息的记录或历史表。每条记录都有一个创建记录时的日期时间字段,以及新旧状态。

表 A

ID 一个 CreatedOn 旧状态 状态 新
10001 2021 年 2 月 5 日 12:00:00 空值 饥饿的
10001 2021 年 3 月 5 日 12:00:00 饥饿的 伤心

表 B

ID B CreatedOn B 状态 旧 B 状态 新
10001 2021 年 2 月 5 日 12:00:00 空值 积极的
10001 2021 年 4 月 5 日 12:00:00 积极的 不活跃

我想要的结果是一个记录表,其中包含每个日期时间的所有状态更改。

一个 CreatedOn 旧状态 状态 新 B CreatedOn B 状态 旧 B 状态 新
2021 年 2 月 5 日 12:00:00 空值 饥饿的 2021 年 2 月 5 日 12:00:00 空值 积极的
2021 年 3 月 5 日 12:00:00 饥饿的 伤心 空值 空值 空值
空值 空值 空值 2021 年 4 月 5 日 12:00:00 积极的 不活跃

然而,我的查询结果返回一个没有表 B 中最后一条记录的表

一个 CreatedOn 旧状态 状态 新 B CreatedOn B 状态 旧 B 状态 新
2021 年 2 月 5 日 12:00:00 空值 饥饿的 2021 年 2 月 5 日 12:00:00 空值 积极的
2021 年 3 月 5 日 12:00:00 饥饿的 伤心 空值 空值 空值

我所拥有的并不复杂......但我不知道为什么它不起作用。

SELECT *
FROM  A
FULL OUTER JOIN B
  ON A.A_CreatedOn = B.B_CreatedOn

我的完整查询与此类似

SELECT 
 [A_CreatedOn] 
 ,[Status A OLD]
 ,[Status A NEW]
 ,[B_CreatedOn]
 ,[Status B OLD]
 ,[Status B NEW]      
FROM  A
FULL OUTER JOIN B
  ON A.A_CreatedOn = B.B_CreatedOn
JOIN C
 ON A.ID = C.ID
WHERE C = '10001'

标签: sqlsql-serverjoinouter-join

解决方案


JOIN C
 ON A.ID = C.ID
WHERE C = '10001'

问题应该出在这种情况下。检查这个地方的加入条件。


推荐阅读