Интересно, почему CASE
нельзя использовать. В любом случае:
UPDATE tableX
SET balance = balance * (1 + 0.06)
WHERE balance > 10000 ;
UPDATE tableX
SET balance = balance * (1 + 0.05)
WHERE balance <= 10000
AND balance > 0 ;
Возможно, вы хотите поместить это в транзакцию.
Без использования CASE
и только с одним UPDATE
:
UPDATE x
SET x.balance = x.balance * (1 + y.raise/100)
FROM tableX AS x
JOIN
( SELECT 0 AS low, 10000 AS high, 5.0 AS raise
UNION
SELECT 10000, 9999999999, 6.0
) AS y
ON x.balance > y.low
AND x.balance <= y.high
И еще один подход, просто для удовольствия:
UPDATE tableX AS x
SET balance = balance *
( SELECT TOP 1
change
FROM
( SELECT 0 AS low, 1.05 AS change
UNION
SELECT 10000, 1.06
) AS y
WHERE balance > low
ORDER BY low DESC
)
WHERE balance > 0