SQL - 按前面

时间:2017-08-08 19:39:52

标签: sql sql-server tsql sql-order-by

我有以下查询。

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

我该如何做到这一点?

3 个答案:

答案 0 :(得分:2)

另一个选择

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

品牌X将是第一个,然后它将保留品牌的剩余订单

答案 1 :(得分:0)

我认为你必须手动添加一个case语句。

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

答案 2 :(得分:0)

你可以使用ORDER BY FIELD(column_name,values,.....)

  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