Вы должны добавить условие из оператора CASE
в WHERE
и просто удалить CASE
, как показано ниже.
SELECT DISTINCT
DO.Contract_Number AS Contract_Number,
'Ambiguity in contract No' AS Remarks
FROM
weight3 w3, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND w3.ContractNo <> DO.Contract_Number
UNION ALL
SELECT DISTINCT
w3.ContractNo AS contract_number,
'Ambiguity in Transporter Name' AS Remarks
FROM
weight3 w3, TransporterInformation TI, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND w3.Transporter_Name <> TI.TransporterName
Редактировать
Если выожидая несколько WHEN
операторов для каждого CASE
, тогда вы должны использовать OR
в условии WHERE
, как показано ниже.
SELECT DISTINCT
DO.Contract_Number AS Contract_Number,
CASE
WHEN conditiion1
THEN 'value1'
WHEN conditiion2
THEN 'value2'
ELSE ''
END AS Remarks
FROM
weight3 w3, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND (conditiion1 OR conditiion2)
UNION ALL
SELECT DISTINCT
w3.ContractNo AS contract_number,
CASE
WHEN conditiion1
THEN 'value1'
WHEN conditiion2
THEN 'value2'
ELSE ''
END AS Remarks
FROM
weight3 w3, TransporterInformation TI, Delivery_Order DO
WHERE
w3.DO_UID = DO.DO_UID AND (conditiion1 OR conditiion2)
Редактировать 2: использовать стандартный оператор JOIN вместо старого синтаксиса соединения
Как предложил @Gordon Linoff, лучше использовать стандартную инструкцию JOIN поверх старой. Вы найдете несколько блогов или сообщений, связанных с этой темой, некоторые из них здесь. SQL SERVER - Почему бы вам не использовать старый стиль JOIN? или Использовать ключевое слово JOIN или нет .
Я переписываю здесь первый оператор SELECT
для примера.
SELECT DISTINCT
DO.Contract_Number AS Contract_Number,
CASE
WHEN conditiion1
THEN 'value1'
WHEN conditiion2
THEN 'value2'
ELSE ''
END AS Remarks
FROM
weight3 w3
INNER JOIN Delivery_Order DO ON w3.DO_UID = DO.DO_UID
WHERE
(conditiion1 OR conditiion2)