我有两个值匹配的表,我们称之为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中的Field插入了值Loc1
。我需要根据表2中的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 :(得分:0)
可以使用基本CASE
来确定Table2
中的哪一列包含value
中Table1
列中引用的值:
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
我假设这只是您的实际数据/表结构的简化版本,但您可能会考虑的是,如果这两个表应该包含相同的信息,那么您实际上不需要这两个表。
相反,可以从任一表中旋转或取消数据,以便根据需要在其他表的结构中获得结果。