【发布时间】:2013-06-08 04:37:47
【问题描述】:
我有两张桌子,我们称它们为 A 和 B 表:-
表 A 如下所示:
A.Num1 | A.Num2 | A.Date
12345 | 38170 | 28/05/2013
12345 | 38170 | 29/05/2013
12345 | 38170 | 31/05/2013
12345 | 38170 | 01/06/2013
12345 | 38170 | 03/06/2013
12345 | 38170 | 04/06/2013
12345 | 38170 | 04/06/2013
12345 | 38170 | 07/06/2013
表 2 (B) 如下所示:
B.Num1 | B.Num2 | B.Status | B.Date
12345 | 38170 | New | 28/05/2013
12345 | 38170 | Closed | 31/05/2013
12345 | 38170 | Reopened | 04/06/2013
我需要一个这样的表作为输出 - 它基本上应该包含表 A 中的所有行 + 表 B 中的状态
Num1 | Num2 | Status | Date
12345 | 38170 | New | 28/05/2013
12345 | 38170 | New | 29/05/2013
12345 | 38170 | Closed | 31/05/2013
12345 | 38170 | Closed | 01/06/2013
12345 | 38170 | Closed | 03/06/2013
12345 | 38170 | Reopened | 04/06/2013
12345 | 38170 | Reopened | 04/06/2013
12345 | 38170 | Reopened | 07/06/2013
另外,最好通过简单的SQL语句,而不是程序。
提前致谢。如有任何澄清,请发表评论
因德鲁
更新
当表 B 中的两行状态更改但在同一日期时,我在联接中得到不一致的值。
举个例子:
我有两张表,比如 A 和 B。它们是相当大的表,它们记录了某些信息。表 A 每隔几天扫描一次数据但缺少状态列的文档 如果有更改,则表 B 将获得一个带有状态列的新条目。 我需要匹配这两个并为表 A 中对应于 B 的每个条目派生一个状态。
表 B
Id | Num1 | Num2 | CreatedOn | Status
100 | 12345 | 38170 | 28/05/2013 | New
150 | 12345 | 38170 | 28/05/2013 | Closed
200 | 12345 | 38170 | 31/05/2013 | Reopened
250 | 12345 | 38170 | 04/06/2013 | Closed
表 A
Id | Num1 | Num2 | CreatedOn
55 | 12345 | 38170 | 28/05/2013
99 | 12345 | 38170 | 30/05/2013
145 | 12345 | 38170 | 31/05/2013
192 | 12345 | 38170 | 31/05/2013
223 | 12345 | 38170 | 04/06/2013
所需的输出
Id | Num1 | Num2 | CreatedOn | Status
55 | 11552 | 38170 | 28/05/2013 | New
99 | 11552 | 38170 | 30/05/2013 | Closed
145 | 11552 | 38170 | 31/05/2013 | Reopened
192 | 11552 | 38170 | 31/05/2013 | Reopened
223 | 11552 | 38170 | 04/06/2013 | Closed
相反,我得到:(使用 Jeffrey Kamp 的回复)
Id | Num1 | Num2 | CreatedOn | Status
55 | 11552 | 38170 | 28/05/2013 | Closed
99 | 11552 | 38170 | 30/05/2013 | Closed
145 | 11552 | 38170 | 31/05/2013 | Reopened
192 | 11552 | 38170 | 31/05/2013 | Reopened
223 | 11552 | 38170 | 04/06/2013 | Closed
还有这个:(使用回复 2 - Mark Bannister)
Id | Num1 | Num2 | CreatedOn | Status
55 | 11552 | 38170 | 28/05/2013 | New
99 | 11552 | 38170 | 30/05/2013 | New
145 | 11552 | 38170 | 31/05/2013 | Reopened
192 | 11552 | 38170 | 31/05/2013 | Reopened
223 | 11552 | 38170 | 04/06/2013 | Closed
很明显,记录 Id-55 可以是新的或关闭的,因为表 B 中有两个条目在同一天 (28/05/13)。但逻辑是它从新 -> 关闭 -> 重新打开 那么有没有办法做到这一点呢?
【问题讨论】:
-
但是,考虑到您想要的输出,您如何将状态值“新”与日期“29/05/2013”进行逻辑关联?
-
我会考虑不同的设计,因为加入日期范围会导致性能不佳
-
请不要冒险进入表格的语义。我可以向您保证,这是所需的输入和输出!
-
同意,但我被卡住了。该系统已经实施。现在更改架构不是一种选择...
-
是新的、关闭的和重新打开的唯一可能的状态吗?