2010-10-22 114 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