2015-07-17 4 views
1

У меня есть запрос, где мне нужно объявить переменную и установить значение для нее. Затем в инструкции select, основанной на одном из значений столбца (max_val), мне нужно будет изменить значение переменной, если значение переменной превышает значение в max_col. Основной запрос выглядит как на картинке ниже:Установить значение переменной и изменить на основе условия SQL

Declare @variable int 
Set @variable = x 

select * from (
    select 
    *, 
    row_number() over (partition by account_id, product order by revenue desc) as rk 
    from (
    select * 
    from dataset 
    where account_id = 'abc' 
    and product = 'xyz' 
    and @variable between min_val and max_val 
) x 
) y 
where y.rk =1; 

В этом запросе, если @variable > max_val, то никакие записи не будут показаны. Тем не менее, я хочу включить условие, при котором, когда указанные критерии соответствуют, @variable присваивается значение max_val.

+0

В SQL Server, вы можете не возвращают строки и установить переменную в одном запросе. –

ответ

0

Вы можете ввести это после того, как второй линии, поставить правильное значение в @variable:

select @variable = case 
         when max(max_val) > @variable then @variable 
         else max(max_val) 
        end 
from dataset 
where account_id = 'abc' 
and product = 'xyz' 
+0

Не уверен, что я делаю что-то неправильно, но запрос по-прежнему не дает мне никаких записей. Если я удалю условие «и @variable между min_val и max_val», я получаю запись. В идеале с применением нового условия я должен получить ту же запись Спасибо за ваш быстрый ответ! – Abhi

+0

@Abhi Можете ли вы проверить значение '@ variable' до выполнения запроса? Это то, чего вы ожидаете? – GolfWolf

+0

@Wolf Извините, запрос работает, но только для нескольких значений в столбце продукта. Думаю, мне нужно будет проверить атрибуты других столбцов один раз и вернуться к вам. Большое спасибо за вашу помощь!!! – Abhi