2012-07-25 127 views
3

我有2個表。我需要更新數據tableB中的數據,使用tableA中的數據填充數據。SQL Server查詢更新

但問題在於設計(注意:我無法更改設計,因爲它是一個現成的系統,我只需要處理失敗)。

比方說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這個名字在tableAtableB這個名字對應那裏的ID's。

例子:表A的

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

例終是:表B的

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

例終是:

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); 

回答

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); 
0

這取決於你正在使用的MSSQL版本,但如果你使用的版本支持PIVOT關鍵字,我強烈建議使用它。基本上,您可以「旋轉」一個表格,並使用它將您的行轉換爲列。

如果你沒有這個,那麼另一種方法是使用一個臨時表並自己做一個關鍵點。這是一個漫長的過程,但相當簡單。這裏是關於使用臨時表dynamic pivoting in sql server的文章。希望這可以幫助!