• 締切済み

ORDER BY CASEで異なる並替えをするには

(状態)-(分類) 状態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)の場合で (分類)の値に対する並び替えを変更することができません。 どうやったら、上記の並び替えができるのか、教えていただけると幸いです。

みんなの回答

回答No.4

みなさまどうもありがとうございました。 おかげさまで解決することができました。 残念なことにパスワードを失念し、再発行に必要な情報もわからなくなっため、 質問者としてお礼を描くことができません。 つきしては、この欄でお礼を申し上げます。

すると、全ての回答が全文表示されます。
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.3

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

すると、全ての回答が全文表示されます。
  • mpro-gram
  • ベストアンサー率74% (170/228)
回答No.2

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

すると、全ての回答が全文表示されます。
回答No.1

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

すると、全ての回答が全文表示されます。

関連するQ&A