2013-05-24 2 views
1

Это мой запрос, который работает:Невозможно добавить оператор IF в SQL запросе

Select AsOfDate, Family, Type, DocID, Title, Date1, Date2, Date3, Stat1, Stat2, Stat3 
FROM DocumentationData 
WHERE Type = @Type 
AND Family = @Family 
AND AsOfDate = (SELECT Max(AsOfDate) 
         FROM DocumentationData 
         WHERE AsOfDate <= @CurrentDate) 

Я хочу, чтобы добавить условие. Я хочу, чтобы дополнительное ограничение использования = «Активный», если @ActiveOnly верно

Это то, что я пытаюсь, но это приводит к ошибке:.

Select AsOfDate, Family, Type, DocID, Title, Date1, Date2, Date3, Stat1, Stat2, Stat3 
FROM DocumentationData 
WHERE Type = @Type 
AND Family = @Family 
AND AsOfDate = (IF (@ActiveOnly = 'TRUE') 
       BEGIN 
       SELECT Max(AsOfDate) 
       FROM DocumentationData 
       WHERE AsOfDate <= @CurrentDate 
       AND Usage = 'Active' 
       END 
       ELSE 
       BEGIN 
       SELECT Max(AsOfDate) 
       FROM DocumentationData 
       WHERE AsOfDate <= @CurrentDate 
       END 
       ) 
+0

Какая ошибка? – Marc

+0

Ошибка: неправильный синтаксис рядом с ключевым словом «IF». Неверный синтаксис рядом с ')'. – user1744318

ответ

0

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

SELECT AsOfDate, Family, Type, DocID, Title, Date1, Date2, Date3, Stat1, Stat2, Stat3 
    FROM DocumentationData 
WHERE Type = @Type 
    AND Family = @Family 
    AND AsOfDate = (SELECT Max(AsOfDate) 
         FROM DocumentationData 
        WHERE AsOfDate <= @CurrentDate 
         AND ((@ActiveOnly = 'TRUE' AND Usage = 'Active') 
          OR (@ActiveOnly <> 'TRUE') 
          ) 
        ) 
+0

Отлично! Я думаю, это работает. Благодарю. – user1744318

+0

Рад, что я мог помочь! – ChrisCamp

0

Я думаю, что вам нужно ТОГДА там .

AND AsOfDate = IF (@ActiveOnly = 'TRUE') 
       THEN     
       SELECT Max(AsOfDate) 
       FROM DocumentationData 
       WHERE AsOfDate <= @CurrentDate 
       AND Usage = 'Active' 

       ELSE 
       BEGIN 
       SELECT Max(AsOfDate) 
       FROM DocumentationData 
       WHERE AsOfDate <= @CurrentDate 

       END IF 
+0

Я все еще получаю сообщение об ошибке с THEN. – user1744318

+0

Хммммм ... Какая ошибка вы получаете? – DaveyLaser

+0

Неверный синтаксис рядом с ключевым словом «IF». Неверный синтаксис рядом с ключевым словом «THEN». Неверный синтаксис рядом с ключевым словом «ELSE». Неверный синтаксис рядом с ')'. – user1744318

0

Если нет никаких других вариантов, я обнаружил, что копирование все это в двух запросов, как это работает:

IF(@ActiveOnly = 'TRUE') 
BEGIN 
Select AsOfDate, Family, Type, DocID, Title, Date1, Date2, Date3, Stat1, Stat2, Stat3 
FROM DocumentationData 
WHERE Type = @Type 
AND Family = @Family 
AND AsOfDate = (SELECT Max(AsOfDate) 
         FROM DocumentationData 
         WHERE AsOfDate <= @CurrentDate 
         AND Usage = 'Active' 
        ) 
END       
ELSE 
BEGIN 
Select AsOfDate, Family, Type, DocID, Title, Date1, Date2, Date3, Stat1, Stat2, Stat3 
FROM DocumentationData 
WHERE Type = @Type 
AND Family = @Family 
AND AsOfDate = (SELECT Max(AsOfDate) 
          FROM DocumentationData 
          WHERE AsOfDate <= @CurrentDate 
         ) 
END 
Смежные вопросы