#sql #tsql #sql-server-2017
#sql #tsql #sql-server-2017
Вопрос:
Я пытаюсь создать предложение where, в котором есть 2 оператора, которые работают вместе, а затем отдельный оператор, который работает сам по себе, если он соответствует определенным критериям
Я пробовал операторы CASE, AND, OR, и все равно ничего не работает
WHERE HB.CreatedByDate = @ReportDateN AND HB.Date = @ReportDateN - 1
Итак, этот код является моим текущим предложением where, которое возвращает мне результаты, у которых CreatedByDate равен переменной @ReportDateN, но также имеет обычную дату, равную переменной @ReportDateN, за исключением того, что она минусует один день.
Это само по себе делает то, что я хочу, но я хотел бы добавить еще кое-что.
Я хочу сделать так, чтобы, если переменная с именем @WeekDay = ‘Monday’ затем вычитала 3 из @ReportDateN во второй части вместо просто 1.
Любая помощь будет оценена, спасибо!
Комментарии:
1. Просто замените
1
наCASE @WeekDay WHEN 'Monday' THEN 3 ELSE 1 END
Ответ №1:
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
РЕДАКТИРОВАТЬ: Согласно комментарию op ниже:
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)
)
Комментарии:
1. Спасибо вам за вашу помощь и всем остальным. Это работает так, как я прошу, но я хотел бы, возможно, добавить еще одну вещь. Возможно ли получить результаты в промежутке между 3 днями, которые я забираю, если вы меня поймете? Итак, скажем, что сегодня понедельник, и я отнимаю 3 дня, чтобы добраться до пятницы. Смогу ли я получить результаты в субботу и воскресенье? Еще раз спасибо за вашу помощь!
2. @ChungWill Я обновил одно из решений, которые я предоставил выше. Если вы хотели бы использовать другое решение, которое я предоставил, я предлагаю вам поиграть с ним самостоятельно и вернуться, если вам понадобится помощь.
3. Отлично, большое вам спасибо. Я все еще только начинаю изучать SQL и иногда, пытаясь найти правильную логику для выполнения того, что я хочу сделать, сбивает меня с толку, так что спасибо!
Ответ №2:
Как насчет этого :
WHERE
HB.CreatedByDate = @ReportDateN AND
(
@WeekDay = 'Monday' AND HB.Date = @ReportDateN - 3
OR
HB.Date = @ReportDateN - 1
)