2014-10-29 5 views
0

Я пытаюсь создать запрос T-SQL, который возвращает два отдельных запроса (или, если есть намного лучший способ написать это, мне бы очень хотелось узнать, не используя CASE, это прекрасно тоже! Мне интересно знать!)Использование случая для возврата разных наборов запросов

упрощенная квази-код версия запроса

DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/ 

SELECT 
    CASE WHEN @ALob='Item1' THEN 
     (Select e.EventID, e.EventName, Count(*) Rows 
     From tbl_Events e 
     Where BLob='Item1') 
    WHEN @ALob='All'THEN 
     (Select e.EventID, e.EventName, Count(*) Rows 
     From tbl_Events e) END 

Так довольно много пользователь может написать в DECLARE разделе «ALL» или «iTEM1» И в зависимости на то, что они вставляют в него, будет отображаться первый запрос или второй запрос.

Теперь важно отметить, что во втором запросе нет Where BLob='Item1', что важно, потому что Lob в выборе «Все» может быть НИЧЕГО - NULL, Item1, что угодно - и я хочу подтянуть все.

Вся помощь приветствуется!

ответ

0

Вы не можете использовать CASE/WHEN для управления потоком выполнения. Вместо этого вам нужно использовать IF/THEN, например:

DECLARE @ALob VARCHAR = 'Item1' /*Or User can write in 'All'*/ 

IF @ALob='Item1' 
    Begin 
     Select e.EventID, e.EventName, Count(*) Rows 
     From tbl_Events e 
     Where BLob='Item1' 
    End 
Else If @ALob='All' 
    Begin 
     Select e.EventID, e.EventName, Count(*) Rows 
     From tbl_Events e 
    End 
Else 
    Begin 
    Select 'Unrecognized selection' 
    End 
+0

Да, честно говоря, я даже не мог использовать инструкции IF/THEN - я попробую! – FooBun

+0

Хм - Похоже, что он побежал успешно, но он не выплевывает какую-либо фактическую информацию - он просто читает «Успешно завершена команда» – FooBun

+0

Если ваши результаты не получаются, вероятно, из-за того, что @ALob не соответствует Item1 или All. Проверьте мои изменения. Это показывает, как использовать условие по умолчанию для If/Then –

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