2015-04-08 2 views
0

У меня есть таблица, как показано ниже:запроса, чтобы соответствовать значению в нескольких диапазонах

promo_code | minimum_order | discount 
------------+-------------------+------------- 
100   | 10    | 10% 
100   | 20    | 15% 
100   | 30    | 20% 
101   | 13    | 7% 
102   | 8    | 10% 
102   | 12    | 14% 

В другой таблице у меня есть продажи в количестве и акция они имеют право

sales | promo_eligibility | record_id 
--------+-----------------------+------------- 
14  | 100     | 1000 
7  | 101     | 1001 
25  | 102     | 1002 

мне нужно получить скидку, соответствующую объему продаж и продвижению ...

как в приведенных выше примерах:

record_id | discount | Comments 
------------+---------------+-------------- 
1000  | 15%   | (bigger than 10 and lower than 20) 
1001  | 0%   | (did not reached the minimum) 
1002  | 14%   | 

Количество пороговых значений может варьироваться от 0 до 3

Любые идеи?

Спасибо !!!

+0

Что такое Тип данных * скидка * поля ... текст или числовые? – HansUp

+0

Пожалуйста, объясните, почему * record_id * 1000 присваивается скидка 15% * вместо 10%. – HansUp

+0

@HansUp, в комментарии OP объясняет, что 14> 10, но 14 <20? – PaulFrancis

ответ

0

Что-то вроде этого:

select 
    r.record_id, 
    isnull(d.discount, '0%') 
from records r 
outer apply (
    select top 1 discount 
    from discounts d 
    where d.promo_code = r.promo_eligibility 
    and d.minimum_order <= r.sales) 
+1

Примечание. Я также получил бы 10% за спорный заказ ... он не может претендовать на 15% скидку. –

Смежные вопросы