現状では(1)のように
合計数の昇順、ネームの昇順になっているのですが、
これを(2)のように、合計数の昇順、コードは合計数が変わるごとに昇順
ネームは同じネームごとに並べる、といった形にしたいです。
単純に合計数の昇順、コードの昇順にしてしまうと、ネームがバラバラになってしまうので、
同じネームが並んだ形になるようにしたいです。
(1)
合計数 ネーム コード
1 A E011
1 S I241
1 C E010
2 F I799
2 F J023
2 G I682
2 G I199
3 H I558
3 H I161
3 H E025
5 B I562
5 B I189
(2)
合計数 ネーム コード
1 C E010
1 A E011
1 S I241
2 G I199
2 G I682
2 F I799
2 F J023
3 H E025
3 H I161
3 H I558
5 B I189
5 B I562
(1)
合計数 ネーム コード
1 A E011
1 S I241
1 C E010
2番目と3番目は、逆(CがSより先)の誤りですよね?
次のSQLで、どうでしょうか?
SELECT 合計数,ネーム,コード FROM table_name ORDER BY 合計数,コード,ネーム
ネームがばらばらになる、ということは、同じネームに対し、複数のコードがある、ということですね。単純にしてみると、
ネーム : コード
A : 2
A : 4
B : 1
B : 3
というような場合にコードの昇順にすると
B 1
A 2
B 3
A 4
になります。これを
B 1
B 3
A 2
A 4
にしたいのでしょうか? コードの昇順ではないですよね。つまり、要求が矛盾しています。
コード順だけど、コード順に使用するコードは、ネームごとのコードの最小値を使用する、
ということであれば、ソート用の列を用意して、
ネーム : コード :ソート用コード
A : 2 : 2
A : 4 : 2
B : 1 : 1
B : 3 : 1
のようにして、コードではなく、ソート用コードの列でソートすればいいでしょう。
ソート用コードは、ネームごとのMinを使えばいいかと。
ありがとうございました。
やってみます。
tbl1
Name Code
あ 2
か 1
あ 4
か 3
とします。次のクエリを実行します。
SELECT tbl1.*
FROM tbl1 LEFT JOIN ( SELECT Name, Min(Code) AS MinCD
FROM tbl1
GROUP BY Name ) q
ON tbl1.Name = q.Name
order by MinCD,Code
結果はこうなります。
Name Code
か 1
か 3
あ 2
あ 4
サブクエリでソート用のCode列(上記ではMinCdという名前にしています)をつくり、結合させてソートさせます。
ありがとうございました。
参考にさせていただきます。
すみません。2番目と3番目は、逆(CがSより先)でした。
ありがとうございました。