2015-10-06 73 views
0

我正在使用SQL Server:我需要根據檢查兩個列值逐個更新臨時表中的列(電話號碼)。這裏是我當前版本的代碼:基本上它所做的是,它根據匹配連接條件的位置在臨時表中設置列的值。在檢查兩列時設置臨時表中的值

update r 
    set t.phone_number = tb.phone_number 
    from #temptable t 
    inner join phone_number_records tb 
    on t.id = tb.id 
    and 1 = tb.is_this_valid 

現在,我需要檢查phone_number_records表中的另一列值(ready_to_accept_new)和更新臨時表的PHONE_NUMBER場按ready_to_accept_new值。如果ready_to_accept_new等於「1」,並且temptable的「id」與phone_number_records的「id」匹配,我需要在具有匹配記錄phone_number(在phone_number_records表中)的temptable中設置phone_number值。如果此條件沒有匹配的記錄,我們需要將臨時表記錄更新爲以前的記錄(從匹配is_this_valid列值「1」記錄)。

有人能讓我知道如何解決這個問題嗎?提前致謝!

+0

很可能'MERGE'會讓你的生活更容易完成。如果您在樣本數據中添加少量行並獲得期望結果,那麼有人很可能會寫出答案。沒有例子,你目前對邏輯的描述很難理解。 –

回答

0

最快的方法是兩次加入您的表格。 對每個ready_to_accept_new值使用左連接join,然後使用case語句來查看是否存在。 IE:

update r 
set t.phone_number = 
CASE 
WHEN tb_1.id IS NOT NULL THEN tb_1.phone_number 
ELSE tb.phone_number 
END 
from #temptable t 
inner join phone_number_records tb 
on t.id = tb.id 
and 1 = tb.is_this_valid 
left join phone_number_records tb_1 
on t.id = tb.id 
and 1 = tb.per ready_to_accept_new value 

道歉的格式化!

0

除了由約翰提供的答案,就可以用的if..else阻止

if exists(select * from #temptable t 
     inner join phone_number_records tb 
     on t.id = tb.id 
     and 1 = tb.ready_to_accept_new) 

    update r 
    set t.phone_number = tb.phone_number 
    from #temptable t 
    inner join phone_number_records tb 
    on t.id = tb.id 
    and 1 = tb.ready_to_accept_new 

else 

    update r 
    set t.phone_number = tb.phone_number 
    from #temptable t 
    inner join phone_number_records tb 
    on t.id = tb.id 
    and 1 = tb.is_this_valid