我期待 3 列:来自 TOrder 的订单号、最后一个实例(最大)OrderEvent ID,并且我想将 case/when 应用于另一列 (ordereventtypeid)。
订单号和最后一个实例有效。但是,我无法让第三列工作。本质上,我想为每个
OrderEventId
拉取 OrderId
的最后一个实例,然后将 CASE/WHEN
应用于该行。 下面发生的情况是,为所有这些延迟返回“T&R”延迟,而不是仅返回最后一个 OrderEventTypeID
为“107”的延迟。
SELECT
TOrder.OrderNumber
,(SELECT MAX (OrderEventID) FROM TOrderEvent
WHERE TOrderEvent.OrderID = TOrder.OrderID
) AS 'Delay SubQ'
,CASE
WHEN EXISTS (SELECT MAX (OrderEventID) FROM TOrderEvent
WHERE TOrderEvent.OrderID = TOrder.OrderID
AND TOrderEvent.OrderEventTypeID IN (107))
THEN 'T&R Delay'
ELSE ''
END AS 'Delay Case'
FROM
TOrder
WHERE
TOrder.CustomerId IN (14758, 25167)
AND TOrder.OrderDate >= '1/1/2024'
AND TOrder.OrderStatusID NOT IN (1206, 1208)
我尝试过使用子查询、联接等。当加入
TOrderEvent
并使用 MAX ON TOrderEvent.OrderEventID
时,我为每个 ordereventid 获取一行,而不是为每个 orderid 获取一行,仅包含 ordereventid 的最后一个实例。
我正在将 SSMS 19.0.20209 与 Azure 托管 SQL 即服务结合使用。
试试这个
SELECT
TOrder.OrderNumber,
oe.MaxOrderEventID AS [Delay SubQ],
CASE
WHEN oe.OrderEventTypeID = 107 THEN 'T&R Delay'
ELSE ''
END AS [Delay Case]
FROM
TOrder
CROSS APPLY
(
SELECT TOP 1
TOrderEvent.OrderEventID AS MaxOrderEventID,
TOrderEvent.OrderEventTypeID
FROM
TOrderEvent
WHERE
TOrderEvent.OrderID = TOrder.OrderID
ORDER BY
TOrderEvent.OrderEventID DESC
) oe
WHERE
TOrder.CustomerId IN (14758, 25167)
AND TOrder.OrderDate >= '2024-01-01'
AND TOrder.OrderStatusID NOT IN (1206, 1208);