Сумма в расчете на процент - PullRequest
1 голос
/ 05 июля 2019

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

У меня есть запрос, который дает следующий результат:

    select 
    Customer.customer_id,
    Transaction.amount

    From Customer inner join Transaction on Customer.customer_id = Transcation.coustomer_id

Результат:

    customer_id| amount

    01456   |50
    01456   |100
    01456   |400  
    01456   |0

    01963   |50
    01963   |100
    01963   |221
    01963   |0

Теперь я хочу добавить поле приоритета, чтобы дать мне приоритет 1, 2 или 3. Чем меньше сумма, тем выше приоритет. Примечание: я хочу заменить 0 на текст «Негативный». Сумма рейтинга ожидается 0.

Это то, что я хочу.

    customer_id| amount| priority

    01456|    50|   3
    01456|   100|   2
    01456|   400|   1
    01456|     0|   Negative

    01963|    50|   3
    01963|   100|   2
    01963|   221|   1
    01963|     0|   Negative

Это достижимо? Ваша помощь будет принята с благодарностью.

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Оконные функции, такие как ROW_NUMBER(), идеально подходят для этого:

SELECT c.customer_id,
       t.amount,
       ROW_NUMBER() over (PARTITION BY customer_id ORDER BY amount desc) priority
FROM Customer c
JOIN [Transaction] t on c.customer_id = t.customer_id

partition by сбрасывает нумерацию для каждого уникального customer_id, а order by решает, какое направление и порядок нумерациистроки.

0 голосов
/ 05 июля 2019

Используйте row_number() или rank():

select customer_id, amount,
       row_number() over (partition by customer_id order by amount desc) as priority
from t;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...