2013-12-14 39 views
0
  1. SQL其他2012
  2. 無法更改表格中的問題
  3. 有兩個表返回數據,這兩個表是相同
  4. (我沒有設計這個)

表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 

期望的行爲實質上是......除非的applicationID表存在,那麼給我表B,而不是返回表A。

表A確實包含了每個應用程序過期與否,但有一個過期日期(應用程序適用於10天),並且很容易根據該日期挑選出這些應用程序。 只需要通過批准和活動的應用程序flummoxed。

任何幫助非常感謝。

- 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.數據,則在表B中,然後是表B數據。

ApplicationID  Phone   State 
1234    123-456-7890  AK 
5678    246-802-4680  NY 
9876    234-432-1234  TX 

回答

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 
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()之前)

相關問題