2013-10-16 51 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 

数据/表结构,但是你可能会考虑的是如果这两个表应该包含相同的信息,那么你实际上不需要这两个表。

相反,如果需要,可以从任一表中转移或取消转移数据,以便在其他表结构中获得结果。

相关问题