sql - SAS SQL Left join 基于条件而不删除表 A 中的行
问题描述
我有 2 个表,并希望根据特定条件将表 B 连接到 A
联接基于“ID”(a.ID = b.ID),但如果 b.status_date >= a.date,我只想从表 B 中引入 2 列“status_date”和“flag_y”
表 A:
+------------+-----+--------+
| date | ID | Flag_x |
+------------+-----+--------+
| 01/03/2019 | 100 | x |
| 01/03/2019 | 101 | x |
| 02/03/2019 | 102 | x |
| 02/03/2019 | 103 | x |
+------------+-----+--------+
表 B:
+-------------+---------+--------+
| status_date | field_x | Flag_y |
+-------------+---------+--------+
| 15/03/2019 | 100 | y |
| 10/01/2019 | 102 | y |
+-------------+---------+--------+
期望的输出:
+------------+-----+--------+-------------+--------+
| date | ID | Flag_x | status_date | Flag_y |
+------------+-----+--------+-------------+--------+
| 01/03/2019 | 100 | x | 15/03/2019 | y |
| 01/03/2019 | 101 | x | | |
| 02/03/2019 | 102 | x | | |
| 02/03/2019 | 103 | x | | |
+------------+-----+--------+-------------+--------+
我在下面尝试的代码删除了 ID 102 的行,在这种情况下,我想保留此行但不从表 B 中引入信息,因为“status_date”在表 A 中的“日期”之前。我假设需要添加where子句中有什么东西???
PROC SQL;
Create Table Output As
Select
a.*
,b.status_date
,b.flag_y
From Table_A as a
Left join Table_B as b
On b.ID = a.ID
Where b.status_date is Null or b.status_date >= a.date
;QUIT;
希望这是有道理的,有人可以提供帮助
解决方案
请试试这个。
SELECT
a.*
,b.status_date
,b.flag_y
FROM
Table_A as a
LEFT JOIN Table_B as b
ON b.ID = a.ID
AND b.status_date >= a.date
推荐阅读
- javascript - 使用选择选项仅显示第一个具有所需值 =“”的表行
- java - 此代码是适配器模式的示例吗?
- javascript - 如何正确使用 vue-materials 选项卡路由器和 vue-router?
- jquery - 在 VB.net 中执行 jquery.get() 函数
- c# - 使用反射为 COM 对象设置事件处理程序?
- python - 如何将带有 Python 绑定的 C 库编译到多个虚拟环境中?
- python - 在虚拟环境中安装 python 包
- c# - CSharp - 调用没有参数的函数 - 错误 33 'foo' 没有重载匹配委托
- python - 如何从一个 while 循环到另一个循环中获取值?
- webview - WebView CustomScrollView + Floating AppBar