我有一个查询,该查询返回所有未结订单,并使用字符串“In List”填充新列(如果关联活动表中存在该订单 ID 的特定活动)。
如何让新列返回特定活动的 min(Activity.ActivityDate) 而不是“IN LIST”字符串,或者如果没有该特定名称的活动则返回 NULL?
这是有效的查询,但不是我想要的:
SELECT
Orders.DateOrder,
Orders.ID,
case
WHEN Orders.ID IN (
SELECT Activity.IDOrder from Activity
LEFT OUTER JOIN Orders ON (Activity.IDOrder=Orders.ID)
where Activity.ActivityName IN ('Processed','Packaged'))
THEN 'IN LIST'
END as NewColumn
FROM Orders
where Orders.EndDate Is Null
我尝试用 min(Activity.ActivityDate) 替换“IN LIST”,但收到“无法绑定”错误 - 可能是因为它无法在外部查询中识别它。但是,如果我将其添加到外部查询中,我会将结果限制为仅具有特定活动的开放 orderID,而即使不存在活动,我也需要它们。
现有查询运行速度相当慢。
什么是更快的方法?
这应该可以做到,而且时间也更短:
SELECT
o.DateOrder,
o.ID,
MIN(a.ActivityDate) NewColumn
FROM Orders o
LEFT JOIN Activity a ON a.IDOrder = o.ID AND a.ActivityName in ('Processed', 'Packaged')
WHERE o.EndDate IS NULL
GROUP BY o.DateOrder, o.ID