SQL - 按前面特定值的列排序

SQL - Order by column with specific value in front

我有以下查询。

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

我怎样才能做到这一点?

另一种选择

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

品牌 X 将排在第一位,然后它将保留品牌的剩余顺序

我认为您必须使用 case 语句手动添加它们。

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

您可以使用 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