Многие ваши выражения могут быть упрощены, если вы понимаете, что вам не нужно вычитать вычисленные предыдущие суммы (единственное, для которого я не могу получить приличное выражение на данный момент, это USD10
).Например, столбец USD1
всегда будет иметь значение от 0 до 4, основываясь на остатке от деления всей суммы на 5.
Это определение оператора по модулю, в SQL это%
, поэтому мы можем иметь:
(CONVERT(int,@GrossPay)%5) as USD1
Как я уже сказал, большинство других также можно рассчитать с помощью модуля (кроме USD10, все еще пытаясь придумать упрощение)для этого).Я также ввел еще одну переменную под названием @GrossPayInt
, потому что она обрабатывает округление автоматически:
DECLARE @GrossPay Decimal(12,2) SET @GrossPay = 132.78
DECLARE @GrossPayInt int SET @GrossPayInt = @GrossPay
SELECT @GrossPay,
@GrossPayInt/100 as USD100,
(@GrossPayInt%100)/50 as USD50,
(@GrossPayInt%50)/20 as USD20,
CASE WHEN (@GrossPayInt%100)/10 IN (1,3,6,8) THEN 1 ELSE 0 END as USD10 as USD10,
(@GrossPayInt%10)/5 as USD5,
(@GrossPayInt%5) as USD1
Если кто-то еще может предложить хорошее короткое выражение для USD10, я думаю, что это сделано.