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

のは、私が小さい順に他のブランドに続いて、私はブランドXが最初になるように、結果を注文したいブランドA、B、G、X、およびZを、持っていると仮定しましょう。私はまた、カテゴリ、サブカテゴリ、および名前である他の列に起因する順序を保持したい。

結果は次のようになります。

X 
A 
B 
G 
Z 

どのようにすればいいですか?

答えて

2

別のオプション

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

ブランドXは初めてとなる、それは私はあなたが手動でcase文でそれらを追加する必要があるだろうと思うブランド

+0

、ORDER BYを使用することができます。 – user3308219

+0

@ user3308219 –

0

の残りの順序を保持します。

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

あなたは、これは完璧に動作FIELD(column_nameに、値、.....)

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 
関連する問題