2015-07-15 3 views
0

У меня есть простой запрос, в котором я хочу найти значение в столбце, и если совпадение не найдено, я хочу отменить это условие и выбрать любое случайное значение из этого колонка.Как определить приоритет в состоянии ИЛИ в SQL Server

Я пытался добиться этого с помощью OR состояния, используя случай, но безрезультатно

select top 10 * 
from tblRFCWorkload 
where (f1 ='mbb' or f1 = f1) 

В приведенном выше запросе я хочу таблицу результатов, чтобы все строки с «БМБ», если «БМБ» не найден, тогда дайте любое значение вместо mbb. Но вместо этого он возвращает только две строки с МВВ, даже если есть 10 подходящих строк

select top 10 * 
from tblRFCWorkload 
where 1 = case when f1 = 'mbb' then 1 else 1 end 

Этот запрос также возвращает тот же результат, что и 1-го запроса

Если я изменить его на

select top 10 * 
from tblRFCWorkload 
where 1 = case when f1 = 'mbb' then 1 else 0 end 

то это только строки, имеющие значение mbb.

Нужна аналогичная вещь с условием ... поиск одного диапазона, если результаты не найдены, а затем поиск второго диапазона ... как это сделать ???

+0

Теперь я хочу сделать то же самое между оператором ... если значения не найдены с первым диапазоном, а затем фильтруются вторым диапазоном .. как я могу это сделать? –

ответ

1

Я думаю, что вы хотите что-то вроде этого:

select top 10 * 
from tblRFCWorkload 
order by (case when f1 = 'mbb' then 1 else 2 end); 

Это приоритизирует строки, которые вы хотите, выборка топ-10, который будет 'mbb', если они доступны.

+0

@rashminashaikh Не стесняйтесь принимать этот ответ, если он решает вашу проблему. –

0

Вы хотите только результаты, когда f1 = 'mbb', если они есть, в противном случае ничего? В этом случае вам нужно проверить, есть ли соответствующие строки. Что-то наподобие этого

SELECT TOP 10 * 
FROM tblRFCWorkload 
WHERE f1 = 'mbb'  --the match you need 
OR NOT EXISTS   --or there are no matches 
    (SELECT * FROM tblRFCWorkload WHERE f1 = 'mbb') 
Смежные вопросы