プロが教える店舗&オフィスのセキュリティ対策術

(状態)-(分類)
状態a-03
状態a-02
状態a-01
状態b-01
状態c-02
状態b-03
状態d-04
状態e-01
状態e-02
状態e-03

mysql上のデータを上記のように並べたいるために、
まず(状態)をまとめるために次の通りorder by caseを使いました。
select * from data
order by case 状態
when '状態a' then 1
when '状態b' then 2
when '状態c' then 2
when '状態d' then 2
when '状態e' then 3
else 4 end

しかし、分類が状態aの場合と(状態bからd)の場合で
(分類)の値に対する並び替えを変更することができません。

どうやったら、上記の並び替えができるのか、教えていただけると幸いです。

A 回答 (4件)

みなさまどうもありがとうございました。


おかげさまで解決することができました。

残念なことにパスワードを失念し、再発行に必要な情報もわからなくなっため、
質問者としてお礼を描くことができません。

つきしては、この欄でお礼を申し上げます。
    • good
    • 0

no2回答者です。



引き算部分は、桁を合わせた方が良いかも。実験時は、 a,b,c に連結したので、うまくいってたのだけど、元質問にあわせて記述しなおしたら、数値ソートになるかもしれないので。
when '状態a' then concat( '1', (9999-`分類`) )
→変更後
when '状態a' then concat( '1', (99-`分類`) )
    • good
    • 0

文字列連結するのと、分類カラムは数値とみなせれるデータのようなので、逆順にしたいところのみ大きい数値から引いて、並べ替え用データを得る。


select * from data
order by case `状態`
when '状態a' then concat( '1', (9999-`分類`) )
when '状態b' then concat( '2', `分類` )
when '状態c' then concat( '2', `分類` )
when '状態d' then concat( '2', `分類` )
when '状態e' then concat( '3', `分類` )
else 4 end ;
    • good
    • 1

CASE..ENDに続けて「,分類」を追加ではだめですか。

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!