2017-01-30 6 views
0

Я пытаюсь установить условие if внутри предложения where, и я не могу определить правильный синтаксис для того, что я хочу.SQL Server: условие IF внутри условия where

Логика должна быть, если определенный период равен определенному числу, тогда проверьте, чтобы pdftype не был пустым, а затем не проверял все.

Вот что я до сих пор:

where 
    g.ReportInstanceID = blah 
    and rcr.FormID = blah 
    and rcr.FormSectionID = blah 
    and rcr.SubSectionID = blah 
    and CASE rcr.DataCollectionPeriodID 
      WHEN 163 THEN (PDFType IS NOT NULL) 
     END 
+0

Я хотел бы использовать несколько условий с 'OR', как показано в ответ ниже, но вы можете использовать' 'CASE' в WHERE':' И случай, когда rcr.DataCollectionPeriodID = 163 THEN PDFType ELSE 'X' END NOT NULL' –

+0

[This] (http://stackoverflow.com/a/10260297/92546) ответ показывает, как выражение 'CASE' может использоваться в предложении' ON'. То же самое работает для предложения WHERE. – HABO

ответ

5

Это не так, как сазе работы. Я думаю, что это делает то, что вы хотите:

where g.ReportInstanceID = blah 
    and rcr.FormID = blah 
    and rcr.FormSectionID = blah 
    and rcr.SubSectionID = blah 
    and (
      (rcr.DataCollectionPeriodID = 163 and PDFType IS NOT NULL) 
      or rcr.DataCollectionPeriodID <> 163 
     ) 
+0

безупречный спасибо! –

2

Попробуйте это:

. . . 
AND CASE when rcr.DataCollectionPeriodID = 163 THEN 
    case when PDFType is not null then 1 else 0 end 
    else 1 END = 1 
Смежные вопросы