2017-02-22 35 views
1

Не удалось найти правильный пример этого (или, может быть, я просто смотрю в неправильном направлении).Как использовать оператор IF внутри WITH?

В зависимости от значения входящего параметра мне нужно изменить WHERE условие для SELECT.

Например, я получил параметр @bookType со значением «All», и мне нужно сделать что-то вроде этого:

IF @bookType = 'All' 
    SELECT * FROM tBooks 
    WHERE BookType != 'Template' AND BookGroup='Library' 
ELSE 
    SELECT * FROM tBooks 
    WHERE BookType = @bookType AND [email protected] 

кажется простым, но мне нужно это, если внутри С:

WITH Books AS (
    IF... 
    ... 
), bookIds AS (
    ... 
    ... 
) 

И это не работает, потому что я начинаю получать 'Incorrect syntax near IF'. Что именно я делаю неправильно? Или, может быть, можно скрыть это IF внутри оператора WHERE (изменить, где в зависимости от значения параметра)?

+1

Тег dbms, который вы используете. (Этот код специфичен для продукта.) – jarlh

+0

Обновленные теги (mssql, ну, теги меняют его на sql-сервер) –

ответ

4
; 
WITH Books AS (

    SELECT * FROM tBooks 
     WHERE 
      (@BookType = 'All' AND BookType != 'Template' AND BookGroup='Library') 
      OR 
      (@BookType <> 'All' AND BookType = @bookType AND [email protected]) 

) 
+0

Ох ... даже не подумал об этом варианте ... попробует –

+0

Да ... что сделали трюк. Теперь я рушаюсь очень глупо, даже не задумываясь о расширении предложения WHERE ... –