2017-08-08 72 views
0

我有以下查詢。SQL - 按列前具體值排序

SELECT 
    A.*, B.QuantityOnHand, C.Brand, C.Category, C.Subcategory 
FROM 
    item_info A 
JOIN 
    inventory_status B ON A.ListID = B.ListID 
LEFT JOIN 
    item_group C ON A.Parent_ListID = C.ListID 
WHERE 
    (Conditions) 
ORDER BY 
    Brand, Category, Subcategory, Name ASC 

假設我有品牌的A,B,G,X,和Z.我要訂購結果讓X品牌是第一,其次依次遞增等品牌。我還想保留由其他列引起的排序,這些列是類別,子類別和名稱。

完成的結果會是這樣的。

X 
A 
B 
G 
Z 

我該如何做到這一點?

回答

2

另一種選擇

ORDER BY NullIf(Brand,'X'), Category, Subcategory, Name ASC 

X品牌將成爲第一,那麼它會保留品牌

+0

這完美的作品。 – user3308219

+0

@ user3308219樂於助人 –

0

的剩餘訂單,我認爲你必須手動case語句添加。

ORDER BY 
    CASE Day 
    WHEN 'X' THEN 1 
    ELSE 2 
    END 
0

您可以使用ORDER BY FIELD(列,值,......)

SELECT 
    A.* 
    , B.QuantityOnHand 
    , C.Brand 
    , C.Category 
    , C.Subcategory 
    FROM item_info A 
    INNER JOIN inventory_status B ON A.ListID = B.ListID 
    LEFT JOIN item_group C ON A.Parent_ListID = C.ListID 
    WHERE (Conditions) 
    ORDER BY field(Brand, 'X', 'A','B','G','Z') , Category, Subcategory, Name ASC