Как можно условно добавить внутренние объединения в оператор выбора? - PullRequest
0 голосов
/ 17 июня 2011

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

Declare @category nvarchar(100)

select *  
from tableA a  
if (@category = 'all)  
begin  
    inner join tableB b on b.ID = a.ID  
end  
else if (@category = 'open')  
begin  
    inner join tableC c on c.ID = a.ID  
end  

ОБНОВЛЕНИЕ: Я думаю, что я должен был включить, что я использую Common Table Expressions и я пытался использовать динамический sql, и даже делать, еслиоператоры для вызова разных CTE, но кажется, что CTE не нравится ничего, кроме простого оператора select.

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

Ответы [ 2 ]

2 голосов
/ 17 июня 2011

Один из подходов:

select * 
from tableA a 
inner join tableB b on b.ID = a.ID
where @category = 'all'
union all
select * 
from tableA a 
inner join tableC c on c.ID = a.ID  
where @category = 'open'
0 голосов
/ 17 июня 2011

Сделайте весь ваш запрос varchar, затем используйте динамическое выполнение.

declare @sqltorun as varchar(max)
set @sqltorun = 'select *  from tableA a '
if(@Category=='a')
@sqltorun = @sqltorun + 'inner join tableB b on b.ID = a.ID   '
else
@sqltorun = @sqltorun + 'inner join tableB b on b.ID = a.ID '
sp_executesql @sqltorun
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...