表A包含应用程序数据。我们接受申请,在申请时我们需要最少的信息 - 这里的许多值可以为空(或者像NA等一些占位符)。它被分配了一个应用程序编号(应用程序ID)。如果申请被接受,我们需要更多信息 - 我们会对其进行验证。
将我们引导至表B - A的副本,但它仅填充了已接受的应用程序 - 以及经过验证的数据。因此,如果经理接受,应用程序ID将仅存在于表B中。有时,在应用程序进程中,数据是正确的,并且没有进行任何更改 - 导致应用程序ID在两个表中都具有确切的值。有时,数据会发生变化或被添加(我们在接受时需要所有字段)。
我想以一种简单的方式捕获所有应用程序和最新/验证的数据。
例如:
Table A (Active Applications)
ApplicationID Phone State
1234 123-456-7890 AK
5678 246-802-4680 NULL
Table B (Approved/Accepted Applications)
ApplicationID Phone State
5678 246-802-4680 NY
申请5678获得批准,仅供示范,该州被证实为纽约州。 申请1234迄今未获批准(但可能在将来)。
我想写一个查询,它给出了以下结果:
ApplicationID Phone State
1234 123-456-7890 AK
5678 246-802-4680 NY
期望的行为本质上是......返回表A,除非表中存在ApplicationID,然后给我表B.
表A确实包含所有已过期的应用程序,但是有一个到期日期(应用程序有效期为10天),并且很容易根据该日期剔除这些应用程序。 只需要通过批准和有效的应用程序就可以解决问题。
非常感谢任何帮助。
- EDIT-- 谢谢...但是如何处理占位符(如NA或XX)或验证数据与应用程序数据不同?假设第三个活动应用程序如此:
Table A (Active Applications)
ApplicationID Phone State
9876 234-432-1234 NY
Table B (Approved Applications)
ApplicationID Phone State
9876 234-432-1234 TX
该申请因其在表B中的存在而被接受,但该州被证实为TX而非NY。
我希望看到一个输出...表A如果不在表B中的数据.IF在表B中然后是表B数据。
ApplicationID Phone State
1234 123-456-7890 AK
5678 246-802-4680 NY
9876 234-432-1234 TX
答案 0 :(得分:0)
Select a.applicationid, case when b.phone is null then a.phone else b.phone end as phone, case when b.state is null then a.state else b.state end as state
From a
Left outer join b on a.applicationid = b.applicationid
答案 1 :(得分:0)
select
a.applicationid as a1, a.phone as a2, a.state as a3,
b.applicationid as b1, b.phone as b2, b.state as b3,
isnull(b.applicationid, a.applicationid) as applicationid,
isnull(b.phone, a.phone) as phone,
isnull(b.state, a.state) as state
from a
left outer join b on a.applicationid=b.applicationid
(省略第2行和第3行,这些只是为了显示isnull()之前列条目的内容)