SQL Where Clause с оператором If (или Case)? - PullRequest
2 голосов
/ 02 марта 2011

У меня есть следующий оператор SQL:

SELECT 
    WORKORDER.WONUM,
    WORKORDER.WO3, 
    WORKORDER.DESCRIPTION WO_DESC, 
    WORKORDER.WORKTYPE, 
    WORKORDER.STATUS, 
    WORKORDER.WOPRIORITY, 
    (case when WORKORDER.CUSTREQ1=1 then 'Yes' else 'No' end) WO18, 
    WORKORDER.REPORTDATE, 
    WORKORDER.ACTFINISH, 
    (WORKORDER.LOCATION + ' ' +LOCATIONS.DESCRIPTION) LOC_DESC
FROM WORKORDER 
    LEFT OUTER JOIN LOCATIONS ON WORKORDER.LOCATION = LOCATIONS.LOCATION 
WHERE 
    WORKORDER.HISTORYFLAG = 0 
    AND WORKORDER.ISTASK = 0 
    AND WORKORDER.STATUS = 'COMP' 
    AND WORKORDER.STATUSDATE >= getdate() - 1 
    AND WORKORDER.LOCATION LIKE 'ABC%'

Я хотел бы добавить дополнительное условие (возможно, в предложении WHERE), которое включит следующее поведение:
- Если рабочий тип WORKTYPE - «PM», а WOPRIORITY - 5, не включайте его!
- Если рабочий порядок WORKTYPE - это что-то еще, разрешите любой приоритет

Я не уверен, какой именно оператор IF или CASE следует добавить в предложение WHERE, чтобы конкретно ограничить приоритет 5 вечера. Любая помощь очень ценится! Заранее спасибо!


Возможно, я нашел решение! Я добавил следующую строку в конец предложения WHERE:

AND (case when WORKORDER.WORKTYPE='PM' then WORKORDER.WOPRIORITY<>5)

Ответы [ 4 ]

2 голосов
/ 02 марта 2011

Вы можете добавить эту строку в предложение where:

    AND NOT (WORKORDER.WORKTYPE = 'PM' AND WORKORDER.WOPRIORITY = 5)
2 голосов
/ 02 марта 2011

Разве WHERE NOT (WORKTYPE = 'PM' AND WOPRIORITY = 5) не решит вашу проблему?

2 голосов
/ 02 марта 2011

Я думаю, вы, возможно, слишком задумывались об этом ...

WHERE NOT (WorkType = 'PM' AND WOPRIORITY = 5)
0 голосов
/ 02 марта 2011

Обычно я делаю что-то вроде этого:

 ... AND 1 = CASE WHEN WORKTYPE='PM' AND WOPRIORITY=5 THEN 0 ELSE 1 END ...

хотя в этом случае я не понимаю, почему бы вам не использовать более простую логику. Как правило, такие конструкции CASE хороши для обхода бесполезного порядка вычисления SQL в общих логических выражениях. Поскольку хорошо избегать тестирования на нулевые атрибуты и поскольку логический порядок оценки не очень хорошо определен, вы используете CASE для введения определенного порядка операций.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...