• ベストアンサー

SQLで複数のMAX値の取得

VB2010とAccessを使用しています。SQL初心者です。 SQLである列の最大値を求めたいのですが、『0~99』でのMAX、『100~199』でのMAX…のように 各々の範囲での最大値を求めるようなSQLを一行で書くことができるのでしょうか? やはり各範囲づつSQLを書く必要があるのでしょうか? ご教授お願いします。

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

  • ベストアンサー
  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

;を書くまでを一行とするなら select グループ, グループの最大値 from ( select '0~99' AS グループ, max(ある列) AS グループの最大値 where ある列 between 0 and 99 union select '100~199' AS グループ, max(ある列) AS グループの最大値 where ある列 between 100 and 199 union select '200~299' AS グループ, max(ある列) AS グループの最大値 where ある列 between 200 and 299 以下お好きなだけどうぞ ) order by グループ ;

Alshark
質問者

お礼

ありがとうございます。勉強になりました。

その他の回答 (2)

回答No.3

こんにちは。 私なりに、質問内容を解釈して、SQLを作成してみました。 SELECT (SELECT MAX(列名1) FROM テーブル名 WHERE 列名1 BETWEEN 0 AND 99) AS '0~99' ,(SELECT MAX(列名2) FROM テーブル名 WHERE 列名2 BETWEEN 100 AND 199) AS '100~199'

Alshark
質問者

お礼

ありがとうございます。 うまく動作しました。

  • ky072
  • ベストアンサー率60% (85/140)
回答No.2

範囲外の場合には 0 になるような式を作り、 その MAX を取るという方法はいかがでしょう。 SELECT MAX(CASE WHEN ● BETWEEN 0 AND 99 THEN ● ELSE 0 END) AS M0, MAX(CASE WHEN ● BETWEEN 100 AND 199 THEN ● ELSE 0 END) AS M1, MAX(CASE WHEN ● BETWEEN 200 AND 299 THEN ● ELSE 0 END) AS M2,   : こんな感じで。●は対象の列名です。 Accessは使ったことがないので、できなかったら申し訳ないです。

Alshark
質問者

お礼

ありがとうございます。 ACCESSではCASEが使えないそうです(汗) いろいろな方法があって勉強になります。 今後はACCESS以上のDB目指して頑張ってみたいです

関連するQ&A

  • エクセルでSQLを使う

    VB6.0でのSQLは 理解しているのですが (アクセスのデータベース宣言して、使ってるんですが) エクセルでSQLを 使うには、データベースの宣言など、必要らしい。 でも、エクセルのデータやら、文字列や式まで、混ざっているシートと、データベースが頭の中で一致せず、困っています。 ある範囲を宣言するんでしょうか

  • ACCESSでテーブルのMAX値(文字列を除く)をやりたい

    ACCESS2000で1テーブル内の項目のMAX値を取りたいのですが、数値ではないのは除外したいです。 どのようにSQLを組んだらいいのでしょうか。 ex) テーブル名:a フィールド名:ID(string型) +--+ |01| +--+ | 2| +--+ |03| +--+ |04| +--+ |05| +--+ |06| +--+ |R1| +--+ 上記の項目でMAX値06を取りたいのですが SQL>select MAX(ID) as MaxID from a とすると「R1」がMAX値になる。 「06」をMAX値として取りたい。

  • MAX値を条件にしたSQLで困っています。

    MAX値を条件にしたSQLで困っています。 以下のようなデータ(例)があります。 部番A、連番1、明細・・・ 部番A、連番2、明細・・・ 部番A、連番3、明細・・・ 部番A、連番4、明細・・・ 部番B、連番1、明細・・・ 部番B、連番2、明細・・・ 部番単位で、連番が最大であるデータのみを取得したいです。 上記の例だと、 部番A、連番4、明細・・・ 部番B、連番2、明細・・・ の2件です。 SQLをご教授ください。 よろしくお願いします。

  • VBとSQLで、、、、

    私は最近ソフトウェアの開発に携わることになりました。 私自身プログラミングの経験は全くありません。 何を命じられたのかといいますと、VBとSQLをつかって、サーバー上の  データベースにクライアントからアクセスして、ほしいデータだけをもってくる  業務を支援するようなソフトを作るのです。 例えば、ユーザーが日付の範囲だけをいれると、その間に店を訪れた人のすんでい  る地域別、さらにそのお客の年代別で何人いるのかというようなものが  ボタンひとつでだせるようなものなんです。 まったく知識がなくてとりあえずVBの基本とSQLコマンドの本を片手に  やっています。(あと、アクセスでおおよそのデータベースについて学びまし  た) で、結局何がいいたいのかと申しますと、VBとSQLを利用したデータベースの  構築に関する良い文献を紹介していただきたいのです。 VBは初心者なのでとりあえず、それようのものを。 あと、ストアドというものを駆使するらしいので、それについての詳しい本を  紹介してください。サイトなんかでもよいです。 それでは、よろしくお願い致します。  (多分、質問の内容もわけのわからないことを言ってるかもしれません^^;)

  • SQL文のエラー

    PostgreSQLの初心者です。よろしくお願いします。 今、日本語ODBCドライバを使ってクライアント側を VB.NETでプログラムを作っています。PostgreSQLは8.1.4です。 レコードの追加をするために、レコードIDのMAX値を 撮るためにプログラム中にSQL sql = "SELECT MAX(user_id) AS MaxID FROM user" を入れて発行したところ、本来ですと「1」が返って こなければいけないのに、 Msgbox(MaxID) を仕込むと「0」が返ってきます。そして、その後に ERROR [HY000] Error while executing the query; ERROR; operator does not exist: # integer というエラーが返ってきます。 先ほどのSQLはリモートで直接PostgreSQLにつなぐと ちゃんと「1」が返ってくるのですが、VB.NET上では うまくいきません。 質問としては2つあります。 1)VB.NET上で実行すると、なぜ「0」が返ってきて しまうのか? 2)エラーメッセージの意味 の2点です。 よろしくお願いします。

  • ActiveRepots1でこんな帳票できますか?

    VB6.0 + ActiveReports2.0 + SQL2005 で開発しています。 VB も初心者で ActiveReports も初めてさわりますので、このような 事が可能かのか?ということをお聞きしたいのです。 DBに TableA があり、 商品コード   得意先コード  売上数量  A-001        0001       10      A-001        0002       10 A-002        0001       15 A-002        0002        5 A-002        0003        7 A-003        0004        5 といった内容になっているとします。 ここで、            商品コード 得意先コード    A-0001    A-0002    A-0003   0001         10       15   0002         10        5   0003                  7   0004                           5    :           :        :        :     :           :        :        :    ページ計      ZZZ9      ZZZ9     ZZZ9 といった感じです。 最終ページにはページ計の次行に総合計を印字したいのです。 商品コードのMAX列数は6列と決めておき、そのMAX列を 越えたら、改ページします。 ACCESSのクロス集計のような感じです。 良い知恵があれば、どうかご教授願います。

  • SQL文 について教えて下さい

    「Access」で下記のように記述するものを「SQL Server」に置き換えた場合、 どのように記述する事になるのでしょうか。 SELECT Max(CLng(mid(TestId,4,10))) AS MAX_pti_patient_id FROM patient_info WHERE TestCd1 = 1 and TestFlg = 1 どなたか分かる方がいましたら教えて下さい。 よろしくお願い致します。

  • SQL INSERTの使い方を教えてください

    vb2008でアクセスへデータを書き込む部分のコードを書こうとしているのですが、SQLのINSERT構文を使って連続した10レコードをテーブルへINSERTしたいのですが1つわからないところがあります。例えば、あるフィールドで、1番目のレコードだけアイテムが入り、残りは書き込む必要がない場合、Do~Loopなど使用しINSERT構文にて書き込み処理する場合、どのように条件わけするとすっきり書けるでしょうか・・・?いい感じのロジックがあればご教授願います。

  • VB2005でSQLデータの更新

    こんにちは VB2005初心者ですが SQLのデータ(テーブル)SEQに読み込んで 条件式により 別のテーブルに出力するようなことのDataAdpterを使用したサンプルコードを探しています  どなた ご教授ください  SQL文では条件式が複雑なため簡単にできそうにありませんので    よろしく  

  • VBを使ってる初心者です【SQL】【Access】

    VisualStudio2008で、Access2010のデータベースからデータ抽出を行えるアプリを作っています。 このときSQL文を用いてAccessからデータ抽出を行うんですかね? そもそもVisualStudio、SQL、Accessそれぞれがどのように関係しているのかわかりません。 いくつかサイトを見て回ったのですが・・・ 教えてほしいこと 1. データ抽出アプリを作るにあたってVisualStudio、SQL、Accessの各々がどのような役割を果たすか 2. Accessのデータベースの形式は空or Webどちらが有効なのか 3. VisualStudioでデータの抽出を行う方法 長くなりましたがよろしくお願いします。 開発言語はVBで、私自身は簡単なプログラムであれば理解できるレベルです

専門家に質問してみよう