[英]SQL Server 2008 - Updating only a specific number of rows within a table
[英]SQL Server 2008: updating table columns conditionally
我對SQL還是很陌生,所以請耐心等待。
為了簡化我的問題,假設我有兩個具有相同屬性/字段的個人表,例如ID,last_name,first_name,date_of_birth,街道,城市,州,郵政編碼。
我希望根據表1中的內容對表2進行更新,但是我想保留表2中的數據,這些數據是自上次從表1刷新以來添加的。
它歸結為兩個我不知道如何轉換為SQL查詢的邏輯軌道:
提前致謝
好的,所以這兩個表開始時是相同的:
然后,用戶將更新表2,而表1也將在同一時間收到更新。
假設ID 1的名字和中間名稱在表2中已更新,而ID 2的中間名稱在表1中已更新。
所以現在,我正在嘗試提出一個SP,它將基於表1並使用我上面描述的邏輯來更新表2。
即使表2中的每一列都覆蓋了現有數據,也應將其覆蓋。 因此,“約翰”將再次成為蕾切爾。 我想對此進行覆蓋的例外情況是,表2中的數據將被空值覆蓋。
因此,雖然John將被覆蓋回Rachel,但William作為Middle_name應該保留在表2中,因為表1對該ID(ID 1)具有空值,所以我會發布所需輸出的另一張圖片,但是顯然我這樣做了尚無足夠的聲譽來發布2個以上的鏈接。 所以這是我想要的文本輸出
更新后的Person_2
ID |姓氏|名字|中間名
1 | Addy | Rachel | William
2 | Aguilar | Richard | Geoffrey
3 | ...
好吧,我終於明白了。 這是我所做的。
如果有人有更有效的方式來做到這一點,我會很高興。 謝謝。
SELECT Person_2.id
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NULL
THEN Person_1.last_name
WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NOT NULL
AND Person_1.last_name IS NULL
THEN Person_2.last_name
WHEN Person_2.ID=Person_1.id
AND Person_2.last_name IS NOT NULL
AND Person_1.last_name IS NOT NULL
THEN Person_1.last_name
END AS last_name
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NULL
THEN Person_1.first_name
WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NOT NULL
AND Person_1.first_name IS NULL
THEN Person_2.first_name
WHEN Person_2.ID=Person_1.id
AND Person_2.first_name IS NOT NULL
AND Person_1.first_name IS NOT NULL
THEN Person_1.first_name
END AS first_name
,CASE WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NULL
THEN Person_1.middle_name
WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NOT NULL
AND Person_1.middle_name IS NULL
THEN Person_2.middle_name
WHEN Person_2.ID=Person_1.id
AND Person_2.middle_name IS NOT NULL
AND Person_1.middle_name IS NOT NULL
THEN Person_1.middle_name
END AS middle_name
FROM Person_2
LEFT JOIN [Person_1] ON Person_2.id=Person_1.id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.