Access2003:クエリを使ってデータを抽出する方法

このQ&Aのポイント
  • Access2003とWindows XPを使用している場合、特定の条件を満たすデータを抽出するためのクエリを作成する方法について教えてください。
  • SQL構文を使用して、PARTS_NOが「AB9043」であり、TREATMENT_CDが「TN000」でないデータの中で、REV_NOの最大値を持つ行を抽出する方法を教えてください。
  • 集計を使用すると他の列がグループ化されてしまったりするため、適切にデータを抽出する方法がわかりません。おわかりになる方がいらっしゃいましたら、教えていただけますか?
回答を見る
  • ベストアンサー

Access2003:クエリの抽出

Access2003、windows-xpをつかっています。 下記のクエリがあります。 PARTS_NO _____ REV_NO _____ TREATMENT_CLS _____TREATMENT_CD AB9043 _____ 6 _____ 1 _____ TE011 AB9043 _____ 7 _____ 1 _____ TE009 このクエリの「REV_NO」のMAXの数値があるデータだけを抽出したいのですが、どうしたらよいでしょう? 「集計」をつかうと、他がグループ化されてしまったりでうまくいきません・・・。 私は、SQL構文がよくわからないのですが、念の為に、SQL構文を載せておきます。 SELECT DISTINCT SPDS_PARTS_ATTR_TREATMENT.PARTS_NO, SPDS_PARTS_ATTR_TREATMENT.REV_NO, SPDS_PARTS_ATTR_TREATMENT.TREATMENT_CLS, SPDS_PARTS_ATTR_TREATMENT.TREATMENT_CD FROM SPDS_PARTS_ATTR_TREATMENT WHERE (((SPDS_PARTS_ATTR_TREATMENT.PARTS_NO)="AB9043") AND (Not (SPDS_PARTS_ATTR_TREATMENT.TREATMENT_CD)="TN000")); おわかりになる方がいらっしゃいましたら、お願いいたします!!

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

  • ベストアンサー
  • Watapo3
  • ベストアンサー率76% (33/43)
回答No.1

テーブル名:SPDS_PARTS_ATTR_TREATMENT 全フィールド抽出と仮定して、 SELECT * FROM SPDS_PARTS_ATTR_TREATMENT WHERE REV_NO = (SELECT MAX(REV_NO) FROM SPDS_PARTS_ATTR_TREATMENT) では駄目ですか?

mipomipo
質問者

お礼

お礼が遅くなり申し訳ありません。 ありがとうございました!!

関連するQ&A

  • Accessで最新のレコードを抽出するには

    お世話になります。 このようなテーブルがあるとします。 No|日時     | 部門  | 更新内容  --+------------+--------+---------- 1 |04/12 12:21:35| A部門 | 更新C 2 |04/07 09:15:05| B部門 | 更新う 3 |04/19 08:23:45| A部門 | 更新A 4 |04/05 10:15:20| B部門 | 更新あ 5 |04/20 09:20:13| B部門 | 更新い 6  |04/02 09:20:15| A部門 | 更新B この中から部門毎にグループ化して 部門毎に日時の最新のデータ No|日時     | 部門  | 更新内容  --+------------+--------+---------- 3 |04/19 08:23:45| A部門 | 更新A 5 |04/20 09:20:13| B部門 | 更新い を抜き出すクエリの作り方を教えてください。 ちなみに今困っているDBの更新内容に相当するフィールドは50フィールドほどあります。 よろしくお願いします。 多分クエリの集計を使用すると思っています。 多少ですがSQLわかります。 多少ですがVBAわかります。

  • accessとexcel:互換性?

    エクセルのA列に社員NOがだーっと入っています。 その社員をアクセスで作ったDBから抽出して、ある同じデータをだーっと入れたいのですが。 クエリの抽出条件にA列をコピペしたら横に貼り付けられてしまい、”そんな構文はない”とアクセスに言われてしまいました(:_;) ひとつひとつ入力するしかないの? マクロとかSQL構文とかはまったくの初心者です。 バージョンは共に2002です。 よろしく教えて下さい。

  • クロス集計のSQL

    accessのクエリにクロス集計があります 例えば person sex 血液型 ------ --- ------ 111 1 A 222 2 B 333 1 O 100 2 AB ・ ・ 集計↓ sex A B AB O 他 ---- - - - - - 1 15 45 20 10 5 2 20 30 21 12 2 数字は適当です こんな集計をするSQLを知りたいと思っています どこか、これに近いテーマでSQLを解説している サイトでもいいので、ご教授お願いします

    • ベストアンサー
    • MySQL
  • Access クエリ内のクエリ

    クエリの中で、他のテーブルと一致するデータを抽出したいのですが、結果が0件の結果しかかえって来ません。 何処が間違っているのかお教え頂けたら幸いです。 何がしたいかと言うと、「dbo_VIEW_CIJ用売上伝票」の下記項目の中の「T_得意先」の中の抽出フラグのTrueデータを抽出し新しい「T_税抜」テーブルを作成したいのですが、結果は0件しかかえって来ません。 ちなみに、得意先CDのIN句を抜くとちゃんとデータは抽出されます。 《テーブル》 【dbo_VIEW_CIJ用売上伝票】(SQL Serverリンクテーブル) ・納品日付 ・伝票NO ・得意先CD ・税抜金額 ・消費税区分 ・商品名 ・摘要 ・数量 ・単位名 ・単価 ・金額 {T_得意先】 得意先CD 抽出フラグ(YES・NO型) 《抽出条件》 納品日 : >=#(開始日変数)# And #(終了日変数)# 消費税区分 : 1 得意先CD : IN(SELECT [T_得意先]![得意先CD] FROM [T_得意先] WHERE[T_得意先]![抽出フラグ]='True') 《SQL》 SELECT dbo_VIEW_CIJ用売上伝票.納品日付, "" AS 部門コード, dbo_VIEW_CIJ用売上伝票.伝票NO, dbo_VIEW_CIJ用売上伝票.得意先CD, "" AS F, dbo_VIEW_CIJ用売上伝票.税抜金額, dbo_VIEW_CIJ用売上伝票.消費税区分, "" AS 商品CD, dbo_VIEW_CIJ用売上伝票.商品名, dbo_VIEW_CIJ用売上伝票.摘要, "" AS ケース数, "" AS 入数, dbo_VIEW_CIJ用売上伝票.数量, dbo_VIEW_CIJ用売上伝票.単位名, dbo_VIEW_CIJ用売上伝票.単価, [dbo_VIEW_CIJ用売上伝票]![消費税区分]*[dbo_VIEW_CIJ用売上伝票]![税抜金額] AS tmp小計, [dbo_VIEW_CIJ用売上伝票]![数量]*[dbo_VIEW_CIJ用売上伝票]![単価] AS tmp単価計 INTO Tmp税抜 FROM dbo_VIEW_CIJ用売上伝票 WHERE (((dbo_VIEW_CIJ用売上伝票.納品日付)>=#10/21/2013# And (dbo_VIEW_CIJ用売上伝票.納品日付)<=#11/20/2013#) AND ((dbo_VIEW_CIJ用売上伝票.得意先CD) In (select [T_得意先]![得意先CD] from [T_得意先] Where [T_得意先]![抽出フラグ] = True)) AND ((dbo_VIEW_CIJ用売上伝票.消費税区分)=1)) ORDER BY dbo_VIEW_CIJ用売上伝票.納品日付; ※上記SQL文は、SQLビューを記載してますが、デザインビューで作成し、得意先CDのIN句の部分は、得意先CDにビルドを使って入力しました。 参考にしたURL http://office.microsoft.com/ja-jp/access-help/HA010206111.aspx ・サブクエリをクエリ フィールドの抽出条件として使用する Access2010 Windows7

  • 複数フィールドの最大値を行ごと抽出したい

    ACCESS2010を使用しています。 テーブルデータは以下です。 日付 コード 値a 値b 値c 2014/1/1 aaa 100 50 80 2014/1/1 aaa 80  60 30 2014/1/1 aaa 100 20 90 この時欲しいデータは 2014/1/1 aaa 100 50 80 のみです。 値aの最大値を行ごと抽出したいのです。 エクセルデータをリンクテーブルとしています。 値aを集計『最大』としてクエリを作成しましたがうまくいきません。 過去のSQLの質問なども見ましたが、ACCESS初心者のため理解できず困っています。 そもそも、SQL構文を使わずにクエリウィザードでこの抽出はできるものなのでしょうか… トンチンカンな質問でしたら申し訳ございません。

  • Distinct使用時に0除算エラーが起こる

    初めて投稿します。よろしくお願いします。 現在、VB6とアクセス97で構築されたシステムのメンテナンスを行なっています。下記SQLの実行時に0で除算しましたのエラーが出ます。 select * from [ SELECT DISTINCT NO FROM 指示書]. AS NOリスト order by iif(NO = "0", 9999999 ,NO) 色々試してみましたが解決方法が見つからないので質問しました。 ちなみに、アクセス内で"SELECT DISTINCT NO FROM 指示書"というクエリを作成し実行しておくとエラーが出ずに正常に動作します。 よろしければ、ご教授よろしくお願いします。

  • Access 条件によって、加算・減算

    フィールドの値によって加算・減算し集計したいのですが、アドバイスを頂けると幸いです。 ◎環境 Access2010 ◎テーブル ID(AI)|受付CD(テキスト)|科目CD(テキスト)|区分(数値)|金額(数値) 1    |2015062222    |0001       |1      |100000 2    |2015062222    |0005       |2      |30000 3    |2015063333    |0001       |1      |120000 4    |2015063333    |0007       |2      |70000 上記テーブルのデータで、区分1から区分2の金額を減算出来ればと考えております。 その場合、どういったクエリを作成すればよいかわかりません。 ◎理想の集計結果 受付CD(テキスト)|金額(数値)|除外金額(数値)|売上(数値) 2015062222    |100000   |30000      |70000 2015063333    |120000   |70000      |50000 区分2の項目を別の列にできれば、一番理想です。 ▲妥協案として ID(AI)|受付CD(テキスト)|科目CD(テキスト)|区分(数値)|金額(数値) 1    |2015062222    |0001       |1      |100000 2    |2015062222    |0005       |2      |-30000 3    |2015063333    |0001       |1      |120000 4    |2015063333    |0007       |2      |-70000 区分2の金額をマイナスにする。 選択クエリ・SQLどちらでも、実装できれば結構です。 アドバイス頂けましたら幸いです。

  • クロス集計クエリ内の特定フィールドの有無の確認

    クロス集計クエリ内の特定フィールドの有無の確認 いつもお世話になっております。 ご質問です。 【状況】 毎月クラブの部費を集めています。 テーブル「t_buhi_mas」 フィールド(一部抜粋) ・ID_NO(部員の番号) ・ID_NO_s(枝番) ・nm(部員名) ・year_buhi(年)  2017 ・month_buhi(月)  08 ・buhi(部費)   1000 クロス集計クエリのデータを基に、別のテーブルにデータを追加します。 クロス集計クエリの結果一例 ID_NO ID_NO_s nm 08 09 10 11 1 1 山田 1000 1000 1000 10000 ※08 09 10 11・・・月 この結果を基に別テーブル「tbl_A」にデータを追加したいのですが、以下の場所でエラーとなります。 テーブル「tbl_A」 フィールド(一部抜粋) ・ID_NO(部員の番号) ・ID_NO_s(枝番) ・nm(部員名) ・01(金額を格納)  ~ ・12(金額を格納) Dim h_sql as string Dim h_year as string h_year = "2017" h_sql = "TRANSFORM Sum(buhi) AS buhi_sum " & _ "SELECT ID_NO, ID_NO_s, nm " & _ "FROM t_buhi_mas " & _ "WHERE ([year_buhi] = '" & h_year & "') " & _ "GROUP BY ID_NO, ID_NO_s, nm " & _ "ORDER BY ID_NO, ID_NO_s, month_buhi " & _ "PIVOT month_buhi;" Dim cnn As ADODB.Connection Dim rst1 As ADODB.Recordset Dim rst2 As ADODB.Recordset Dim h_str_fld1 As String Set rst1 = New ADODB.Recordset rst1.Open h_sql, cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect With rst1 If .RecordCount = 0 Then: GoTo line4: .MoveFirst Set rst2 = New ADODB.Recordset rst2.Open "tbl_A", cnn, adOpenKeyset, adLockOptimistic, adCmdTableDirect Do Until .EOF rst2.MoveFirst Do Until rst2.EOF If !ID_NO = rst2!ID_NO And !ID_NO_s = rst2!ID_NO_s Then For i = 1 To 12 '1月~12月の計算 If i < 10 Then h_str_fld1 = "0" & i Else h_str_fld1 = i End If On Error Resume Next If IsNull(rst1(h_str_fld1)) Then  ←ここでエラー rst2(h_str_fld1) = 0 Else rst2(h_str_fld1) = rst1(h_str_fld1) End If rst2.Update On Error GoTo 0 Next GoTo line3: End If rst2.MoveNext Loop line3: .MoveNext Loop End With rst2.Close rst1.close cnn.close エラーコメント:このコレクションには項目がありません。 要するに、追加先のテーブル「tbl_A」には毎月の部費を格納するフィールド「01」~「12」があるのですが、 クロス集計結果には「01」がないためだと思います。 On Error Resume Next で回避できると思っていたのですが作動しません。 クロス集計クエリ内に、「01」など結果に基づいたフィールドが無い場合の回避方法がご存知であれば教えてください。 何卒宜しくお願い申し上げます。

  • SQLについて教えてください

    お世話になっております。 以下、取得したい内容です。 この内容に対して、どのようにSQLを書けばよいか良いか教えて頂きたいです。 (1)DBの全テーブルに対して特定のカラムを取得したい。(カラム名はA,Bとする) (2)取得したカラム.Aに格納されている各値に対して、カラム.Bの各レコードの項目には何の値が格納されているか知りたい。 DBはオラクルですが、オラクルでしか使えないSQL構文はつかないようにしたいです。 自分で考えたSQLは、 SELECT A,B FROM * GROUP BY A,B ですが、そもそも全テーブルを指定する際に使用するのが、「*」では正しくないような気もします。 説明がつたなくて申し訳ございません。 宜しくお願い致します。 ・テーブルイメージ テーブル.test1 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 3 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test2 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 1 | | 02 |AA| 1 | | 03 |AB| 2 | | 04 |AB| 2 | | 05 |AC| 1 | | 06 |AC| 3 | | 07 |AC| 3 | +--------+------+ テーブル.test3 +--------+------+ | No | A | B | +--------+------+ | 01 |AA| 3 | | 02 |AA| 1 | | 03 |AC| 2 | | 04 |AC| 3 | +--------+------+

  • access:レポート出力制限

    いつも助けてもらってますm(__)m 社員の教育カルテなるものを作っています。 研修カテゴリー毎(社内・社外etc)にサブレポートを4つ作って それをメインレポートに社員NOをキーとして載せてます。 社員によって研修受け数が多いと2ページにわたってしまう事もあります。 それを回避する為にもサブレポートに最大○レコードまで出力!って指令をかけたいのですがどうしたらよいのでしょうか(・・? また更に1人1ページ!って固定するにはどうしたらよいのでしょうか。 クエリにSQL構文書くのかしら? SQLも初心者です。 よろしくお願いします。 WIN XP/AC2002 です。