2010-10-22 64 views
1

大家好 我们使用SQL 2005(MS),SQL更新列值2

我有一个存储的交易表。每次发生特定事件时,都会将3行添加到该表的特定事务中。

现在我们想要更改(更新)第1行中名为commision的列,第1行中的值为null,第2行中值为123的同一列的值是可能的?

+0

只是为了澄清,我想从同一个表中的行2不是不同的表 – andreas 2010-10-22 11:43:50

回答

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 

为什么使用IN(1234)当= 1234是简单的,并得到了相同的结果。您可以在内部选择中匹配a.transaction_id = b.transaction_id,因此您不必在内部选择上重复您的1234事务选择。

此语法将与其他SQL版本一起使用,但不会像LarsH测试的那样与SQL Server 2005一起使用。该别名将不得不从声明中删除。

+0

保罗,从你的示例代码的commision需要来自同一张表..所以我想要做的是设置事件commision 1从完全相同的表中进行事件2的调用......与您指定的不同(mytable b)。 – andreas 2010-10-22 11:44:46

+0

我试过这个查询:UPDATE PAYMENT SET COMMISSION =(SELECT COMMISSION FROM PAYMENT P WHERE P.PAYMENT_SEQ = 3 AND TRANSACTION_ID IN(SELECT ID FROM TRANSACTION t WHERE ID IN(1234)))WHERE PAYMENT_SEQ = 1 AND TRANSACTION_ID IN(SELECT ID FROM TRANSACTION t WHERE ID IN(1234)) – andreas 2010-10-22 11:51:02

+0

嗯... mytable a和mytable b引用同一张表。 – 2010-10-23 03:37:26