2012-06-13 45 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