1

値に一致する 2 つのテーブルがあります。それを 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     |         

Loc1テーブル 1 のフィールドの値を誤って挿入してしまいました。Table2 の列の名前に基づいて更新する必要があります。

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 値は文字ではありません。簡単にするために、これらの値を使用しました。

4

1 に答える 1

0

これは、 基本を使用して、 の列で参照されている値が のどのCASE列に含まれているかを判別できます。Table2valueTable1

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

これは実際のデータ/テーブル構造の単純化されたバージョンであると想定していますが、これら2つのテーブルに同じ情報が含まれていると想定されている場合、実際には両方のテーブルは必要ないということを考えるかもしれません.

代わりに、必要に応じて他のテーブルの構造で結果を取得するために、いずれかのテーブルからデータをピボットまたはアンピボットすることができます。

于 2013-10-16T16:02:34.327 に答える