Как я могу ограничить свой оператор CASE до 1 строки на оценку - PullRequest
0 голосов
/ 17 мая 2018

Итак, у меня есть простой запрос с 2 строками:

SELECT DISTINCT
    o.OrderNo,
    CASE
        WHEN od.PartNo LIKE '%Amend%' AND od.User_Currency2 IS NOT NULL THEN od.User_Currency2
        WHEN od.PartNo LIKE '%Amend%' AND od.User_Currency1 IS NOT NULL THEN od.User_Currency1
        ELSE o.OrderTotal
        END AS [OrderTotal] 
FROM OrderDet od
   JOIN Orders o ON od.OrderNo = o.OrderNo
WHERE o.OrderNo LIKE '%E'
ORDER BY o.OrderNo

В моем операторе CASE для каждого ордера, если выполнено 1-е условие, я хочу, чтобы оно возвращало только это и игнорировало 2 других параметра, то же самое для условия # 2, и если первые 2 условия не выполняются, тогда по умолчанию ДРУГОЕ

Проблема в том, что я получаю несколько строк на заказ, как вы можете видеть ниже:

enter image description here

Как я могу ограничить только 1 запись на заказ? Я думал, что оператор CASE оценивается по порядку и выдает только 1 значение, но в моем случае каждый заказ возвращает несколько результатов из оператора CASE для каждого заказа

1 Ответ

0 голосов
/ 17 мая 2018

Используйте ряд запросов, объединенных и отфильтрованных по значениям User_Currency2 / User_Currency1, например:

SELECT DISTINCT
    o.OrderNo,
    od.User_Currency2 AS [OrderTotal]
FROM OrderDet od
   JOIN Orders o ON od.OrderNo = o.OrderNo
WHERE
  o.OrderNo LIKE '%E' AND
  od.PartNo LIKE '%Amend%' AND
  od.User_Currency2 IS NOT NULL
UNION
SELECT DISTINCT
    o.OrderNo,
    od.User_Currency2 AS [OrderTotal]
FROM OrderDet od
   JOIN Orders o ON od.OrderNo = o.OrderNo
WHERE
  o.OrderNo LIKE '%E' AND
  od.PartNo LIKE '%Amend%' AND
  od.User_Currency2 IS NULL AND
  od.User_Currency1 IS NOT NULL
UNION
SELECT DISTINCT
    o.OrderNo,
    od.OrderTotal
FROM OrderDet od
   JOIN Orders o ON od.OrderNo = o.OrderNo
WHERE
  o.OrderNo LIKE '%E' AND
  od.PartNo LIKE '%Amend%' AND
  od.User_Currency2 IS NULL AND
  od.User_Currency1 IS NULL
ORDER BY
  o.OrderNo
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...