基于顺序列的sybase更新

时间:2013-06-12 13:51:45

标签: tsql sybase updates

您是否可以在sybase更新中帮助我解决以下问题?

表A

ID   COL1   COL1_AMT   COL2   COL2_AMT   COL3   COL3_AMT   COL4   COL4_AMT
 1    10      100.00    16       50.00    17       80.00    21       90.00   

表B

ID   FIN_AMT
 1        20

每当COL1或COL2或COL3或COL4的值等于'17'时,应从表A中选择相应的数量列COL1_AMT或COL2_AMT或COL3_AMT或COL4_AMT值,并在表B中更新FIN_AMT clumn

此处COL3为17,因此表B中应添加COL3_AMT值80 FIN_AMT

表B中的预期结果

ID   FIN_AMT
 1       100      (Already 20 is there, so 80 should be added to this)

提前致谢

1 个答案:

答案 0 :(得分:0)

我无法在SYBASE上进行测试,而且已经好几年了,所以请怜悯语法的细节;)
像这样的东西应该这样做;

UPDATE TableB  
  SET TableB.FIN_AMT = TableB.FIN_AMT +
    CASE WHEN TableA.COL1 = 17 THEN TableA.COL1_AMT ELSE 0 END +
    CASE WHEN TableA.COL2 = 17 THEN TableA.COL2_AMT ELSE 0 END +
    CASE WHEN TableA.COL3 = 17 THEN TableA.COL3_AMT ELSE 0 END +
    CASE WHEN TableA.COL4 = 17 THEN TableA.COL4_AMT ELSE 0 END
FROM TableB, TableA
WHERE TableB.ID = TableA.ID