【发布时间】:2017-03-14 18:10:55
【问题描述】:
在 MS SQL Server 中,有两个表,“T1”和“T2”,有一个公共字段“ID (PK)”,其中 ID 是唯一的,但对于相同的 ID 记录,T1 和 T2 中的日期可能不同,ABC 或 DEF 的内容也可能不同 E.g:
----------
T1:
----------
ID Date A B C
----------
55 12/1/17 Jim Smith Male
77 12/2/17 Jim Green Male
99 10/3/17 Kate Lee Male
T2:
----------
ID Date D E F
----------
55 12/1/17 Jim Smith Male
77 10/2/16 James Jr Male
99 12/25/17 Kathy Lee Male
我想要一个基于 ID 的某种形式的连接表,并根据最新日期选择 ABC 或 DEF,在这种情况下,我想要
----------
ID Date join1| join2 | join3
----------
55 12/1/17 Jim Smith Male
77 12/2/17 Jim Green Male
99 12/25/17 Kathy Lee Male
这可能吗?
到目前为止,我想出的东西有点乏味:我首先做了一个完整的外部连接:
select * from T1 full outer join T2 on T1.ID = T2.ID
具备以下条件:
ID Date A B C Date2 D E F
----------
55 12/1/17 Jim Smith Male 12/1/17 Jim Smith Male
77 12/2/17 Jim Green Male 10/2/16 James Jr Male
99 10/3/17 Kate Lee Male 12/25/17 Kathy Lee Male
然后我尝试使用case when then else选择ABC或DEF字段,看起来很丑,我担心性能。
select T1.ID,
case when T1.Date > T2.Date then T1.Date else T2.Date END as Date
case when T1.Date > T2.Date then T1.A else T2.D END as Join1
case when T1.Date > T2.Date then T1.B else T2.E END as Joni2
case when T1.Date > T2.Date then T1.C else T2.F END as Join3
from RESULT_TABLE
是否可以执行以下操作:
select T1.ID,
case when T1.Date > T2.Date then
T1.Date, T1.A as Join1, T1.B as Join2, T1.C as Join3
else
T2.Date, T2.D as Join1 , T2.E as Join2, T2.F as Join3
END
from RESULT_TABLE
【问题讨论】:
-
虽然数据不应该影响 SQL - 你能提供更多数据吗? :)
-
什么引擎(DB2、mySQL、SQL Server、Oracle)?我会使用 union、cte 和 row_number() over partition by... 来选择最近日期的记录的详细信息。
-
@xQbert 你能详细说明一下吗?顺便说一句,我正在使用 SQL Server。