Lisanas Ответов: 1

Расчет точки на основе суммы между двумя диапазонами в SQL


Привет, друзья, мне нужна помощь, чтобы получить решение для нижеследующего
речь идет о вычислении очков на основе суммы между некоторыми диапазонами, такими как
у меня есть такие данные, как
Customer Amount
Customer_A  4500
Customer_B  3200
Customer_C  1500

с предопределенной настройкой, такой как
Type   Point  Each_Amt  From   to
Type-A   1      100       0    1000
Type-B   2      100    1001    2000
Type-C   3      100    2001    3000
Type-C   4      100    3001    and Above

мне нужно получить такой результат как
Name         Amt   Points
Customer_A  4500   120
Customer_B  3200   68
Customer_C  1500   20

может быть, я могу сделать это на C#, но если я получу sql-запрос, это будет лучше.
пожалуйста, помогите мне и заранее спасибо

Что я уже пробовал:

я понятия не имею с чего начать

Richard MacCutchan

Вы можете проверить документацию SQL, чтобы узнать, какие математические операции он поддерживает.

Gerry Schmitz

Я не думаю, что SQL делает вычисления "уменьшающегося баланса" без какого-то процедурного кода или функций, которые начинают выглядеть как (плохой) C#.

Maciej Los

Как 4500 сумма возвращает 120 баллов?

Maciej Los

Как сумма 4500 превращается в 120 баллов?

Christian Graus

Откуда берутся эти точечные итоги? Почему клиент а имеет 120 баллов? Как эта установка соотносится с любым итогом?

Lisanas

@Maciej Los и @Christian Graus

это как для 1-го (1000/100) * 1 балл= 10
затем вторая (1000/100) *2 =20
затем третье (1000/100) *3 =30
баланс (1500/100)* 4==60
итого 120 баллов
мне очень жаль, если мой вопрос не совсем ясен.

1 Ответов

Рейтинг:
2

Jörgen Andersson

Поскольку очки начисляются по-разному в зависимости от диапазона, вам нужно будет использовать такой случай, как этот.

SELECT  Customer
       ,Amount
       ,CASE
            WHEN Amount <= 1000 THEN Amount / 100
            WHEN Amount BETWEEN 1001 AND 2000 THEN (((Amount - 1000) / 100 ) * 2) + 10
            WHEN Amount BETWEEN 2001 AND 3000 THEN (((Amount - 2000) / 100 ) * 3) + 30
            WHEN Amount > 3001 THEN (((Amount - 3000) / 100 ) * 4) + 60
        END Points
FROM    MyTable
Для этого сумма должна быть положительным целым числом. Отрегулируйте код по мере необходимости