Несколько утверждений в предложении where - PullRequest
0 голосов
/ 01 апреля 2019

Я пытаюсь создать предложение where, которое имеет 2 оператора, которые работают вместе, а затем отдельное утверждение, которое работает само по себе, если оно соответствует определенным критериям

Я пробовал операторы CASE, AND, ORи все еще ничего не работает

WHERE HB.CreatedByDate = @ReportDateN AND HB.Date = @ReportDateN - 1

Так что этот код является моим текущим предложением where, которое получает результаты me, которые имеют CreatedByDate, равный переменной @ReportDateN, но также имеют регулярную дату, равную переменной @ReportDateN, за исключением ее минусоводнажды.

Это само по себе делает то, что я хочу, но я хотел бы добавить еще немного.

Я хочу сделать это так, если переменная с именем @WeekDay = 'Monday'затем вычесть 3 из @ReportDateN во второй части вместо просто 1.

Любая помощь будет оценена, спасибо!

Ответы [ 2 ]

0 голосов
/ 01 апреля 2019

Как насчет этого:

WHERE
     HB.CreatedByDate = @ReportDateN AND
     (
        @WeekDay = 'Monday' AND HB.Date = @ReportDateN - 3
        OR
        HB.Date = @ReportDateN - 1
    )
0 голосов
/ 01 апреля 2019
   WHERE HB.CreatedByDate = @ReportDateN
     AND HB.DATE = CASE 
        WHEN @Weekday = 'Monday'
            THEN (@ReportDateN - 3)
        ELSE (@ReportDateN - 1)
         END

Это также можно сделать, комбинируя операторы OR

WHERE HB.CreatedByDate = @ReportDateN AND 
      (
       @Weekday = 'Monday' AND HB.Date = (@ReportDateN - 3) 
      )
   OR
      (
        @Weekday != 'Monday' AND HB.Date = (@ReportDateN - 1) 
      )

Только для справки, обратите внимание, что следующее не будет работать:

 WHERE CASE @Weekday = 'Monday' THEN .... ELSE ..... END 

РЕДАКТИРОВАТЬ: Комментарий к операторуниже:

WHERE HB.CreatedByDate = @ReportDateN AND 
      (
       @Weekday = 'Monday' AND (
                                HB.Date = (@ReportDateN - 3) OR
                                HB.Date = (@ReportDateN - 2) OR
                                HB.Date = (@ReportDateN - 1) 
                               )  
      )
   OR
      (
        @Weekday != 'Monday' AND HB.Date = (@ReportDateN - 1) 
      )
...