3

私は2つのテーブルを持っています。のデータを更新し、からのデータをtableB入力する必要がありますtableA

しかし、問題は設計です (注: 既製のシステムであるため、設計を変更することはできません。失敗に対処する必要があります)。

tableA(2 列) データ ソースが次のように構成されているとします。

ID | NAME
1    dude
2    dud
3    bro
4    broo
5    killa
6    whale
--ID is an index and NAME is UNIQUE

tableB(6列)目的地(私にとって難しい部分):

ID1 | NAME1 | ID2 | NAME2 | ID3 | NAME3
1     dude    2     dud     3     bro
4     broo    5     killa   6     whale
--All columns here has UNIQUE data though it is not set on the design.
--and so on until the end.

今、私がやりたいのはUPDATE、そこにある IDtableAに対応する名前に名前を付けることです。tableB

例:

ID from TableA is 1
Find ID=1 on TableB
If ID=1 then UPDATE the next column to 'dude'

TableA の例の終わりは次のとおりです。

ID | Name
9997 sweet
9998 jess
9999 grape
--The END

TableB の例の終わりは次のとおりです。

ID1 | NAME1 | ID2 | NAME2 | ID3 | NAME3
9997  sweet1  9998  jess1   9999  grape1
--The END

私を助けてください。

ノート:

  • 指定されたすべてのテーブル名と列名は、例示のみを目的としています。
  • テーブルにはさらに列がありますが、変更/変更する必要がないため、それらの例は含めませんでした。
  • これは、 のデータTableBが変更され、正しいデータと一致しなくなったためです。
  • したがって、正しいデータを再TableB入力する必要があり、正しいデータの唯一のソースはTableA.
  • 最後に、SQL Server 2008 を使用しています。

- - - 編集 - - -

完全に機能した最終的なクエリは次のとおりです。

UPDATE CHAR_INFOR
SET
    CHARID0=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR0_KEY), 
CHARID1=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR1_KEY), 
CHARID2=(SELECT CONVERT(VARCHAR,substring(char_data, 9, 16)) from CHAR_DATA0 A WHERE A.CHAR_KEY=CHAR2_KEY);
4

2 に答える 2

3

標準SQLが機能するはずです:

UPDATE TableB B 
SET Name1=(SELECT Name from TableA A where A.ID=ID1), 
Name2=(SELECT Name from TableA A where A.ID=ID2), 
Name3=(SELECT Name from TableA A where A.ID=ID3);
于 2012-07-25T19:58:05.870 に答える
0

使用しているMSSQLのバージョンによって異なりますが、使用しているバージョンがPIVOTキーワードをサポートしている場合は、それを使用することを強くお勧めします。基本的に、テーブルを「ピボット」し、それを使用して行を列に変換できます。

これがない場合は、一時テーブルを使用して自分でピボットを実行することもできます。これは一種の長い手順ですが、かなり簡単です。これは、 SQLサーバーで動的ピボットを行うための一時テーブルの使用に関する記事です。お役に立てれば!

于 2012-07-25T19:56:01.267 に答える