• ベストアンサー

GROUP BY と、ORDER BY

ACCESS97を使用しています。 SQLで、GROUP BY と、ORDER BYの両方を使用することは可能でしょうか? Set DB = CurrentDb() strSQL = "SELECT 製造番号 FROM 入庫データ WHERE " strSQL = strSQL + "整理NO='" & Me.整理NO入力 & "'" strSQL = strSQL + "GROUP by 製造番号" & ";"      ← ※ 'strSQL = strSQL + "ORDER by 製造番号" & ";" ※部分に入れる記号がわかりません。 ' ? ,?それとも順序が違うのでしょうか?

  • cdma
  • お礼率36% (91/247)

質問者が選んだベストアンサー

  • ベストアンサー
  • mirurin
  • ベストアンサー率43% (48/111)
回答No.2

> クエリー式'製造番号ORDER by 製造番号’の構文エラー:演算子がありません  GROUP by 製造番号 と ORDER by 製造番号 の間にスペースを入れてください。

cdma
質問者

お礼

上手く行きました。ありがとうございました。

その他の回答 (2)

  • software
  • ベストアンサー率28% (24/84)
回答No.3

「クエリー式'製造番号ORDER by 製造番号’の構文エラー:演算子がありません」のエラーメッセージを正確に書かれているとしたら、「GROUP by 製造番号」の後ろに空白が入力されていないだけではないのでしょうか。 strSQL = strSQL + "GROUP by 製造番号 ORDER by 製造番号 ;" 上記の記述でよいと思うのですが。

  • mirurin
  • ベストアンサー率43% (48/111)
回答No.1

> SQLで、GROUP BY と、ORDER BYの両方を使用することは可能でしょうか? 可能です。 間に記号はいらないと思います。 strSQL = strSQL + "GROUP by 製造番号" & " " strSQL = strSQL + "ORDER by 製造番号" & ";" でダメでしたか?

cdma
質問者

お礼

早速の回答ありがとうございます。 実行時エラー '3075' クエリー式'製造番号ORDER by 製造番号’の構文エラー:演算子がありません  とでてきます。別に原因があるのでしょうか?

関連するQ&A

  • where order by

    where order by についてお教え下さい。 データの参照で strSQL = "select * from DATA Where TYPE_NO=" & TYPE_NO で、それぞれのタイプは表示できるのですが、 order byで降順表示したいのですが、組み合わせ方が分かりません。 ご教授下さい。

  • ASで指定した項目名をGROUP BYやORDER BYで使用する方法。

    ただいまSQLの勉強をしています。 タイトルどおりなのですが、ASで指定した項目名をGROUP BYやORDER BYで使用する方法はあるのでしょうか? CASE文を使用したこちらのSQL文↓で、SELECT文、GROUP BY句、ORDER BY句の中に重複する部分が多く出てしまうのでどうにかすっきりさせたいと思い、独自に調べたり色々と試したのですがわからず、質問させていただきました。 お分かりになる方、いらっしゃいましたらご助言どうぞよろしくお願いいたします。 <SQL文> SELECT CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END AS グループ名称 , sum(suryo) AS 数量合計 FROM tran GROUP BY CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END ORDER BY CASE WHEN trancd % 3 = 1 THEN '購入番号(1,4,7,…)の集計' WHEN trancd % 3 = 2 THEN '購入番号(2,5,8,…)の集計' ELSE '購入番号(3,6,9,…)の集計' END;

  • SQLで部分的にGROUP BYしたいとき

    はじめまして。 SQLで部分的にGROUP BYで集計したいのですが、 どうもしっくりくるSQLがかけません。 多分CASEあたりを使うと綺麗で高速なSQLがかけると思っています。 皆様のお知恵をお借りしたく投稿しました。 具体的には以下のような出納帳データで 出納帳 日付     金額 2012/8/20 1000 2012/8/20 2000 2012/8/21 -1000 2012/8/21 -2000 2012/8/22 3000 2012/8/23 4000 2012/8/24 -3000 2012/8/24 -4000 2012/8/27 5000 ↓集計 日付     金額 2012/8/20 1000 2012/8/20 2000 2012/8/21 -3000(-1000と-2000を集約) 2012/8/22 3000 2012/8/23 4000 2012/8/24 -7000(-3000と-4000を集約) 2012/8/27 5000 というように、マイナスの金額は集約してしまいたいのですが、どのようなSQLが最適でしょうか? とりあえず、UNIONかなと思い、 (SELECT 日付, 金額 FROM 出納帳 WHERE 金額>=0 UNION ALL SELECT 日付, 金額 FROM 出納帳 WHERE 金額<0 GROUP BY 日付 ) ORDER BY 日付 とプラス金額とマイナス金額にわけUNIONしたのですが、 もっと綺麗(高速)にやる方法があるのではないか?と思い投稿いたしました。 なにかヒントございましたら、ご教授ください。 DB環境:Oracle 11g

  • GROUP BY/ORDER BYの併用で期待するORDERが得られま

    GROUP BY/ORDER BYの併用で期待するORDERが得られません。 データベース初心者です。よろしくお願いいたします。 table id group_id name 1 1 冷蔵庫1 2 2 カメラ1 3 2 カメラ2 4 2 カメラ3 5 3 テレビ1 のようなテーブルを、group_idでグループ化し、idの大きい順に並べた以下のようなデータ id group_id name 5 3 テレビ1 4 2 カメラ3 1 1 冷蔵庫1 を取得しようとして悩んでおります。 SELECT MAX(id) AS max_id, id, group_id, name FROM table GROUP BY group_id ORDER BY max_id DESC というクエリですと max_id id group_id name 5 5 3 テレビ1 4 x 2 y 1 1 1 冷蔵庫1 という結果が得られますが、xとyところが、期待するx=4、y=カメラ3とならないケースがあります。 いくつかのテーブルで試しましたが、期待する結果になるものとならないものがありました。 例えばこれを自己結合することも考えたのですが、WHERE句にASで命名した「max_id」が含まれると「max_idが不明」というエラーが出ます。 MySQLのバージョンは4.0.xでして、サブクエリーが使えません。 このような状況で、何か方法がございましたらご教授のほどお願い申し上げます。 「期待する結果がクエリ1回で得られない」ということを知れるだけでも構いません。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • MySQL
  • GROUP BYで集約されるときのソートを変えたい

    GROUP BYで集約されるときのソートを変えたい MySQLの5.1を使用しています。 テーブル"tbl"には、"no","id","score"の3つのフィールドがあり、 "no"は主キーです。 +---+----+-------+ | no | id | score | +---+----+-------+ | 1 | 10 | 10002 | | 2 | 10 | 10000 | | 3 | 10 | 10008 | | 4 | 11 | 10004 | | 5 | 12 | 10006 | +---+----+-------+ 上記の表から、 scoreの値が高い順にグループ化してソートしたいのですが、 以下のSQL文ではscoreが最初に登録されたものに集約されてからグループ化されてソートしてしまうため、 思い通りの結果が得られずに困っています。 ↓具体例 SELECT no, id, score FROM tbl ORDER BY score DESC GROUP BY id; +---+----+-------+ | no | id | score | +---+----+-------+ | 5 | 12 | 10006 | | 4 | 11 | 10004 | | 1 | 10 | 10002 | +---+----+-------+ ↓欲しいソート順 +---+----+-------+ | no | id | score | +---+----+-------+ | 3 | 10 | 10008 | | 5 | 12 | 10006 | | 4 | 11 | 10004 | +---+----+-------+ テンポラリテーブルはなるべく使用せずソートしたいのですが、 このような事は可能なのでしょうか? ご存知の方がいらっしゃいましたら教えていただけると助かります。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • GROUPBY ORDER BY

    idの大きい順から並べたいのですがうまくいきません 調べて サブクエリなどを使い実行しましたがうまくいきませんでした ご教授お願いいたします ソース $sql='SELECT memberid,mailid,max(name),max(day) FROM messageall WHERE mailid=? GROUP BY memberid ORDER BY id DESC LIMIT '.$limit.' OFFSET '.$offset; サブクエリでも試しましたが正直 ソースがめちゃくちゃでデータが表示されませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • sqlでのORDER BYについて

    SQL初心者です。 MySQLを使用しています。 SELECT文で、ORDER BYを2つ指定したいのですが、ORDER BYの複数指定方法が分かりません。 どなたかご教授お願いします。

  • order byで並び変えし最大値の項目の抽出方法ついて

    すみません。 order byで並び変えし最大値の項目のみ一意で抽出したいのですが 、 SELECT * from ta order by no,date1,date2; no | date1 | date2 ----+-------+------- 11 | 2008 | 0501 11 | 2008 | 0502 11 | 2008 | 0502 11 | 2008 | 0503 12 | 2008 | 0501 12 | 2008 | 0502 12 | 2008 | 0503 13 | 2008 | 0501 13 | 2008 | 0502 13 | 2008 | 0503 14 | 2008 | 0501 とあった場合、 no,date1,date2のorder by順番で並び変えし 11 | 2008 | 0503 12 | 2008 | 0503 13 | 2008 | 0503 14 | 2008 | 0501 とno項目に対し一つずつだけ出力したい場合どのようにしたらよいのでしょうか? LIMITとoffsetだと1項目分しか出力されず困っております。 SELECT * from ta where no in (select no from ta group by no limit 1 offset 0) order by no,date1 desc,date2 desc limit 1; 宜しくお願い致します。

  • ORDER BY句を使用しているSQL文に関して質問です。

    ORDER BY句を使用しているSQL文に関して質問です。 SELECT文にてORDER BY句を使用した場合、SELECT結果の件数によってソート順が変わるような事はあるのでしょうか? 事象としては以下の通りです。 以下のCUSTOMERテーブルがあるとします。 |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|11111111|00000001|000000000000| |0001|11111111|00000002|000000000000| |0001|11111111|00000003|000000000000| |0001|11111111|00000004|000000000000| |0001|11111111|00000005|000000000000| |0001|11111111|00000005|000000000001| |0001|22222222|00000001|000000000000| |0001|22222222|00000002|000000000000| |0001|22222222|00000003|000000000000| |0001|22222222|00000004|000000000000| |0001|22222222|00000005|000000000000| |0001|22222222|00000006|000000000000| |0001|22222222|00000007|000000000000| |0001|22222222|00000008|000000000000| |0001|22222222|00000009|000000000000| |0001|22222222|00000010|000000000000| |0001|22222222|00000011|000000000000| |0001|22222222|00000012|000000000000| |0001|22222222|00000013|000000000000| |0001|22222222|00000014|000000000000| |0001|22222222|00000014|000000000001| 埋め込みSQLを実行し、上記のテーブルに対し以下の条件でカーソルをオープンしました。 (1)SELECT ITIREN FROM CUSTOMER WHERE MISE = 0001 AND KOKYAKU = 11111111 ORDER BY ITIREN DESC (2)SELECT ITIREN FROM CUSTOMER WHERE MISE = 0001 AND KOKYAKU = 22222222 ORDER BY ITIREN DESC カーソルの1件目をFETCHしたところ、以下のような結果となりました。 (1) |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|11111111|00000005|000000000001| (2) |店番|顧客番号|一連番号|一連番号枝番| |MISE|KOKYAKU |ITIREN |IEIRENEDANO | |0001|22222222|00000014|000000000000| 一連番号枝番をORDER BY句のソート条件に追加するか、WHERE句の条件についかすれば事象は解決するのですが、同様のSQLを実行しているのに結果が変わってしまうのがどうしても解せません。 もしご存知の方がいらっしゃいましたら、ご教授頂けると助かります。 テーブルの内容をごちゃごちゃと書いてしまったので、見づらくてすみません。。。 レイアウトがずれてたら更にすみませんm(_ _)m HTMLのタグって使えるんでしょうかね?

  • order by での変数使用について。

    order by での変数使用について。 PHPのsql文でDBからデータを抽出する際にorder byで特定のデータに対して昇順、降順でデータを抽出したいのですが、ここで変数を使うとorder byが上手く機能しません。 変数でなく、直接カラム名を記入すれば動くのですが・・・。 一つ疑問に思ったことはorder byで変数が使えるかというところです。 where等の条件検索では問題なく使えるので使えないということはないのかなぁと思って 試行錯誤していましたが、どうにもこうにも上手くいきません。 また変数にした理由ですが、今回情報を検索する機能を作成しています。 データの数が多いため、次のページなど何ページかに分けて表示しようと思っています。 そのため特定の値(検索条件)をセッションに保存し、次のページなどに移動しても値を保持して 同じ条件で続きからデータを抽出したいのです。 sql文は $sql = 'SELECT * FROM `apartment` left join `member` on a_member = m_id left join `district` on a_district = d_id left join `room` on a_room = r_id WHERE `a_flg` = "0" AND `a_district` = "'.$_SESSION["district"].'" order by "'.$_SESSION["condition"].'"'; このようになっています。 セッションに値は入っていて、出力するとちゃんとカラム名(検索条件)が表示されます。 よろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう