2017-08-08 33 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