大家好 我们正在使用SQL 2005(MS),
我有一个存储交易的表。每次发生特定事件时,都会为该表的特定事务添加3行。
现在我们要更改(更新)第1行中名为commision的列,其中第1行为null,第2行中相同列的值为123,这是可能的吗?
答案 0 :(得分:1)
update mytable a
set commission = ( select commission
from mytable b
where a.transaction = b.transaction
and b.event = 'row 2 event' ) // some value that selects row 2
where a.event = 'row 1 event' // some value that selects row 1
and a.transaction = 'specific transaction' // leave off for all transactions
根据你的评论,我已将声明重新格式化为:
UPDATE PAYMENT a
SET COMMISSION= ( SELECT COMMISSION
FROM PAYMENT b
WHERE b.PAYMENT_SEQ = 3
AND a.transaction_ID = b.TRANSACTION_ID )
WHERE a.PAYMENT_SEQ = 1
AND a.TRANSACTION_ID = 1234
为什么在= 1234更简单并获得相同结果时使用IN(1234)。您可以在内部选择中匹配a.transaction_id = b.transaction_id,这样您就不必在内部选择上重复1234事务选择。
此语法适用于其他SQL版本,但不适用于LarsH已测试过的SQL Server 2005。必须从语句中删除别名。