我正在尝试更正现有应用程序的错误(我没有源代码,这应该在UI中处理)。它的要点必须是
1)如果OrderLineItem fk_OrderId = 888888888它始终是第一行。
2)如果供应商类型以' NEW%'开头。它始终是下一个并发行
3)订单后面的任何其他内容都无关紧要
我正在玩这个,不过我对语法的工作方式有点困惑:
SELECT
[Columns]
FROM [dbo].[OrderLineItem] o
LEFT OUTER JOIN [OPUS2].dbo.Vendor v ON o.fk_VendorID = v.ID
WHERE fk_OrderID = @fk_OrderID OR fk_OrderID = 888888888
ORDER BY
CASE WHEN o.ID = 888888888 THEN 1 END ASC,
CASE WHEN v.[Type] Like 'NEW%' THEN 2 ELSE 3 END
答案 0 :(得分:2)
您只需要一个CASE
表达式:
ORDER BY
CASE WHEN o.ID = 888888888
THEN 1
WHEN v.[Type] LIKE 'NEW%'
THEN 2
ELSE 3
END
答案 1 :(得分:1)
这应该有效:
SELECT
[Columns]
FROM [dbo].[OrderLineItem] o
LEFT OUTER JOIN [OPUS2].dbo.Vendor v ON o.fk_VendorID = v.ID
WHERE fk_OrderID = @fk_OrderID OR fk_OrderID = 888888888
ORDER BY
CASE WHEN o.ID = 888888888 THEN 1 ELSE 2 END ASC,
CASE WHEN v.[Type] Like 'NEW%' THEN 1 ELSE 2 END ASC
这会对您的结果施加两个排序顺序。第一个将强制888888888值到顶部,其他所有内容都未分类。第二种排序将在外部排序(888888888和非888888888)中的每个不同值内,将NEW%值排序到顶部,将其他所有值排序到底部。