2015-10-05 61 views
1

后设置为零我写一个脚本,从一列减,并将其设置为零如果结果小于0 到目前为止,我有SQL减法

UPDATE [table01] SET [c1] = [c1] - ? WHERE [id] = ? 
UPDATE [table01] SET [c1] = 0 WHERE [id] = ? AND [c1] < 0 

有什么办法缩短上面的内容以便它减去,然后在列小于0时将其设置为0,而不是跨越两个UPDATE语句?

回答

3

根据你分享的SQL,这似乎是MS SQL-Server,不幸的是,它没有least函数。你可以,但是,仍然实现了case表达相同的行为:

UPDATE [table01] 
SET [c1] = CASE WHEN [c1] > ? THEN [c1] - ? -- Both ?s set with the same value 
        ELSE 0 
       END 
WHERE [id] = ? 
1

CASE声明。与其他答案相同的结果,只是重新排列了逻辑

UPDATE [table01] 
SET [c1] = CASE WHEN [c1] - ? < 0 THEN 0 ELSE [c1] - ? END 
WHERE [id] = ?