2013-10-16 155 views
1

我有兩個表格將匹配一個值,我們稱之爲PersonID。以下是表格:基於值從另一個表格中選擇列名稱

Table1 

ID | Field | Value 
-----|-----------|-------- 
1 | Loc1 | faf 
1 | Loc1 | 0653 
2 | Loc1 | 5711 
3 | Loc1 | 9669 
4 | Loc1 | ado 
4 | Loc1 | 6843 
5 | Loc1 | rfc 
6 | Loc1 | cba 


Table2 
ID | Loc1 | Loc2 
-----|-----------|-------- 
1 | faf  | 0653 
2 |   | 5711 
3 |   | 9669 
4 | ado  | 6843 
5 | rfc  |   
6 | cba  |   

我意外地在Table1中插入了字段值Loc1。我需要根據Table2中的colomn的名稱進行更新。

如何通過在Table2中搜索Table1.Value列來更新Table1,然後獲取列名稱。我需要它看起來像這樣:

ID | Field | Value 
-----|-----------|-------- 
1 | Loc1 | faf 
1 | Loc2 | 0653 
2 | Loc2 | 5711 
3 | Loc2 | 9669 
4 | Loc1 | ado 
4 | Loc2 | 6843 
5 | Loc1 | rfc 
6 | Loc1 | cba 

注意:所有Loc2值不是數字和所有Loc1值不是字母。爲了簡單起見,我只是使用了這些值。

+0

我只是想更新Table1.Field,以便它具有與表2中相關的正確列名稱。 – rjbogz

+0

ID列不是標識列,它只是該人員的ID。所以,約翰史密斯將是ID 1,簡·杜將是ID 2,等等。 – rjbogz

+0

'Table1.ID'是'Table2.ID'的foriegn鍵,只是標準化你的數據並刪除'Table1.Field'和'Table1.Value'。如果'Table1'中沒有其他數據,則刪除它。如果您不想使用標準化數據,請不要使用關係數據庫。 – Jodrell

回答

0

這可以使用基本CASE,以確定哪些列Table2完成包含Table1value列參考值:我假設,這僅僅是你的實際的簡化版本

UPDATE t1 
SET Field = 
CASE 
    WHEN t1.Value = t2.Loc1 THEN 'Loc1' 
    WHEN t1.Value = t2.Loc2 THEN 'Loc2' 
END 
FROM Table1 t1 
JOIN Table2 t2 
    ON t1.ID = t2.ID 

數據/表結構,但是你可能會考慮的是如果這兩個表應該包含相同的信息,那麼你實際上不需要這兩個表。

相反,如果需要,可以從任一表中轉移或取消轉移數據,以便在其他表結構中獲得結果。

相關問題