【发布时间】:2019-09-30 20:00:50
【问题描述】:
我有两张这样的表:
tblOrders:OrderNo (pk)、CurrentStepNo (fk)
tblSteps:StepNo (pk)、OrderNo (fk)、StepName、StepType、StepStart、StepStop
tblOrders 包含大量关于我们的销售订单的信息,而tblSteps 包含大量关于构建我们销售的材料所需的正确顺序步骤的信息。
我正在尝试构建一个遵循此逻辑的查询:
"对于所有订单,从步骤表中选择当前步骤名称。如果 Step Type 等于 'XO',然后选择最近的 已完成(StepStop 不为空) 常规步骤(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'。但是,我无法将该逻辑放入我已经工作的查询中。
注意:对于本示例中缺少示例数据,我深表歉意。我通常会发布,但在这种情况下不能。这也不是作业题。
我已经查看了这些参考资料:
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
但我正在努力正确地制定逻辑
【问题讨论】: