У меня есть две таблицы, например, так:
tblOrders: OrderNo (pk), CurrentStepNo (fk)
tblSteps: StepNo (pk), OrderNo(fk), StepName, StepType, StepStart, StepStop
tblOrders
содержит тонны информации о наших заказах на продажу, а tblSteps
содержит тонны информации о соответствующих последовательных шагах, необходимых для построенияматериал, который мы продаем.
Я пытаюсь создать запрос, который следует этой логике:
"Для всех заказов выберите имя текущего шага из таблицы шагов. Если шагТип равен 'XO', затем выберите последний завершенный (где StepStop не равен NULL) обычный шаг (где StepStop равен "YY") "
У меня есть следующий запрос:
SELECT
tblOrders.*,
tblSteps.StepName
FROM
tblOrders
INNER JOIN tblSteps
ON tblOrders.OrderNo = tblSteps.OrderNo
AND tblOrders.CurrentStepNo = tblSteps.StepNo
, который успешно возвращает мне текущее имя шага для незавершенного заказа. Что мне нужно сделать, так это когда tblOrders.CurrentStepNo
имеет тип 'XO'
, чтобы найти MAX(tblSteps.StepStop) WHERE tblSteps.StepType = 'YY'
. Однако у меня возникли проблемы с введением этой логики в мой уже работающий запрос.
Примечание. Извините за отсутствие примеров данных в этом примере. Я обычно отправляю, но не могу в этом случае. Это также не домашний вопрос.
Я рассмотрел эти ссылки:
Случай в утверждении Select *
https://blogs.msdn.microsoft.com/craigfr/2006/08/23/subqueries-in-case-expressions/
Но пока не повезло.
Я пробовал это:
SELECT
tblOrders.*,
CASE
WHEN tblSteps.StepType = 'XO' THEN (-- Some logic here)
ELSE tblSteps.StepName
END AS StepName
FROM
tblOrders
INNER JOIN tblSteps
ON tblOrders.OrderNo = tblSteps.OrderNo
AND tblOrders.CurrentStepNo = tblSteps.StepNo
Но я пытаюсь правильно сформулировать логику