2012-06-13 44 views
3

在Microsoft SQL Server:更新基礎上選擇同一個表 - 又一次,又一次

我已經看到了這個問題好幾次,但看不到任何解決的問題:

UPDATE theTable t1 
SET t1.col2 = 
    (SELECT (10 * (col1 + col2)) 
    FROM theTable t2 
    WHERE t1.busRelAccount = t2.busRelAccount 
    AND t2.rowName = 'POS' 
    ) 
WHERE t1.busRelAccount = t2.busRelAccount 
AND t1.rowName = 'INVENTORY' 
; 

任何人在不使用CURSOR並循環表的情況下解決了這個問題?

+1

歡迎來到StackOverflow:如果您發佈代碼,XML或數據樣本,在文本編輯器中單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)即可ely格式和語法突出顯示它! –

回答

6

不是100%肯定你正在試圖做什麼 - 但最有可能的,你可以寫你的UPDATE聲明要簡單得多 - 這樣的事情:

UPDATE t1 
SET t1.col2 = 10 * (t2.col1 + t2.col2) 
FROM theTable t1 
INNER JOIN theTable t2 ON t1.busRelAccount = t2.busRelAccount 
WHERE 
    t1.rowName = 'INVENTORY' 
    AND t2.rowName = 'POS' 
; 

基本上,您定義的兩個表之間的JOIN (都是同一張表,真的),然後你定義如何更新列t1根據列t2