2014-09-18 99 views
1

我想正確的錯誤與現有的應用程序(我沒有源,這應該真的在UI中處理)。它的要點必須是排序方式有多個CASE語句

1)如果OrderLineItem fk_OrderId = 888888888它總是第一行。

2)如果供應商類型與「新%」它永遠是下並行線

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 

回答

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%值排序到頂部,其他所有值排在最後。

+0

感謝感激 – 2014-09-18 21:02:52

2

你只需要爲這一個CASE表達:

ORDER BY 
    CASE WHEN o.ID = 888888888 
      THEN 1 
     WHEN v.[Type] LIKE 'NEW%' 
      THEN 2 
     ELSE 3 
    END