TSQL - Использование CASE в предложении WHERE со знаком <или = - PullRequest
0 голосов
/ 13 октября 2011

Я пытаюсь выбрать идентификаторы на основе периода и типа учетной записи. Каждый тип учетной записи будет иметь другой период.Я попробовал следующий код, но ему не понравился оператор <или любые другие операторы.Я не могу использовать временную таблицу из-за системных ограничений.Существует как минимум 6 типов учетных записей.Я искал разные решения, но ничего не нашел.Любая помощь приветствуется.Спасибо </p>

DECLARE @Inputperiod as INT 
DECLARE @Start as INT
DECLARE @Enddate as INT

    SET @Inputperdiod ='2009';
    SET @Start=@Inputperiod-1;
    SET @Enddate=@Inputperiod +1;

        SELECT ID, Period, Type 
        FROM
        TABLE1

        WHERE 

        Period= CASE

        WHEN Type='ASSET' THEN Period < @inputperiod 
        WHEN Type='Liability' THEN Period BETWEEN @start AND @enddate
        END

Ответы [ 2 ]

3 голосов
/ 13 октября 2011

Вы не можете использовать CASE для замены произвольных битов запроса. Вам нужно будет использовать

   SELECT ID, Period, Type 
   FROM TABLE1
   WHERE (Type='ASSET' AND Period < @inputperiod ) 
    OR    (Type='Liability' AND Period BETWEEN @start AND @enddate)
1 голос
/ 13 октября 2011

Вы неправильно поняли формулировку дела. В предложении THEN есть то, что возвращается оператором CASE (например, оператор if ... then ...). То, как вы это написали, возвращает логическое значение.

Попробуйте вместо этого ...

SELECT ID, Period, Type
FROM Table1
WHERE Type='ASSET' AND Period < @inputperiod
UNION
SELECT ID, Period, Type
FROM Table1
WHERE Type='Liability' AND Period BETWEEN @start AND @enddate 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...