ACCESSの質問です。クエリの式を教えてください。

現状では(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人2回まで
  • 登録:2008/12/19 15:32:59
  • 終了:2008/12/26 15:35:02

回答(4件)

id:chuken_kenkou No.1

chuken_kenkou回答回数722ベストアンサー獲得回数542008/12/19 15:44:18

(1)

合計数 ネーム コード

1   A   E011

1   S   I241

1   C   E010

2番目と3番目は、逆(CがSより先)の誤りですよね?

次のSQLで、どうでしょうか?

SELECT 合計数,ネーム,コード
 FROM table_name
 ORDER BY 合計数,コード,ネーム
id:rupopon

すみません。2番目と3番目は、逆(CがSより先)でした。

ありがとうございました。

2008/12/19 17:06:18
id:frkw2004 No.2

ふるるP回答回数192ベストアンサー獲得回数212008/12/19 16:03:04

ポイント30pt

ネームがばらばらになる、ということは、同じネームに対し、複数のコードがある、ということですね。単純にしてみると、

ネーム : コード

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を使えばいいかと。

id:rupopon

ありがとうございました。

やってみます。

2008/12/19 17:19:44
id:panana No.3

panana回答回数87ベストアンサー獲得回数102008/12/19 16:53:03

ポイント30pt

ACCESSのクエリの並べ替えは左から順に適用されます。

なので、列を「合計数」「コード」「ネーム」の順に入れ替えてもよいなら、

入れ替えて、それぞれ「並べ替え」を昇順にすればよいです。

f:id:panana:20081219164853g:image


「合計数」「ネーム」「コード」の順番で表示させたいのなら、

 「合計数」(昇順/表示にチェック)

 「ネーム」(表示にチェック)

 「コード」(昇順/表示にチェック)

 「ネーム」(昇順/表示のチェックを外す) ← 並べ替えのためだけの、表示させない列。

にします。

f:id:panana:20081219164233g:image

id:rupopon

ありがとうございました。

このやり方だと同じネームが飛んで表示されてしまいます。

同じネームが離れないように表示させたいです。

2008/12/19 17:17:58
id:frkw2004 No.4

ふるるP回答回数192ベストアンサー獲得回数212008/12/19 23:32:22

ポイント30pt

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という名前にしています)をつくり、結合させてソートさせます。

id:rupopon

ありがとうございました。

参考にさせていただきます。

2008/12/22 16:00:01
  • id:rupopon
    すみません。frkw2004さんのやり方ですが、
    ネームごとのMinを求めるには
    どのような式が良いでしょうか。
    教えていただけると助かります。
  • id:panana
    >このやり方だと同じネームが飛んで表示されてしまいます。
    >同じネームが離れないように表示させたいです。

    ごめんなさい。
    (2)のようにしたかったわけじゃないんですね…。
  • id:rupopon
    例に不具合があったかもしれません。
    申し訳ございません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません