2016-12-08 5 views
0

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

У меня есть переменная называется доменом, это может быть либо заполнено, либо нет, когда оно заполнено. Я хочу запустить одно утверждение, но когда его нет, я хочу запустить другой. Я бы сказал, что это должно быть что-то вроде очень упрощенной формы.

Не уверен, что этого достаточно, чтобы дать кому-то начать.

Благодаря P


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

Код, показанный ниже, является точным, который я буду работать, и, чтобы быть справедливым, случай, основанный на переменной, может быть проще в соединении, а не в двух операциях select.

select affiliate_id 
     ,campaign_id 
     ,count(*) as leads 
from [BDatabase]..affil a (nolock) 
where cast(created_datetime as date) between @startdate and @enddate 
    and (a.domain = @domain 
     or isnull(@Domain,'') = '' 
     ) 
group by affiliate_id 
     ,campaign_id 
+0

Я думаю, что там должно быть пояснение здесь ответы на все вопросы, которые сочетающих два пример запросов, которые вы использовали. Вы работаете с совершенно несвязанными сценариями или - по вашему вопросу - хотите ли вы иметь условную фильтрацию на основе значений в переменных/параметрах? – iamdave

+0

Привет всем, я подумал, что лучше разместить точный код, который я использую, поскольку это может изменить некоторые ответы и сделать вещи немного легче объяснить. Код, показанный ниже, является точным, который я буду работать, и, чтобы быть справедливым, случай, основанный на переменной, может быть проще в соединении, а не на двух операторах выбора: 'select affiliate_id , campaign_id , count (*) as ведет из [BDatabase] .. affil a (nolock) , где cast (created_datetime as date) между @startdate и @enddate и (a.domain = @domain или isnull (@Domain, '') = '') group by affiliate_id, campaign_id' – PJD

+0

Ваш текущий запрос выглядит так, как если бы он обрабатывал значение '@ domain' по мере необходимости? Можете ли вы разместить некоторые данные образца и текущий и ожидаемый результат вашего запроса? – iamdave

ответ

2
SELECT * FROM tableName 
WHERE domain = CASE WHEN ISNULL(@Domain,'') = '' THEN domain ELSE @Domain END 

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

select affiliate_id 
     ,campaign_id 
     ,count(*) as leads 
from [BDatabase]..affil a (nolock) 
where cast(created_datetime as date) between @startdate and @enddate 
    and a.domain = CASE WHEN ISNULL(@domain,'') = '' THEN a.domain ELSE @domain END    
group by affiliate_id 
     ,campaign_id 
+1

До тех пор, пока требование к '@domain = '.co.uk'' было просто примером, это лучшее решение (которое я часто использую сам). Он не только проверяет «NULL», но только проверяет пустую строку и обрабатывает ее одинаково. – Jens

0
select * from table 
where (domain = @domain and @Domain = '.co.uk') 
or (@domain is null or @domain='') 
Смежные вопросы