- 締切済み
Access累計につきまして
コード 積載 配送 累計 20391 988 01 34952 833 02 48291 142 03 このようなデータが2万行あります。 累計部分に「積載」の累計を表示していきたいのですが、 どのようなコードであれば実行できるのでしょうか。 過去の回答も確認しましたが、理解が及ばなかったため、 質問させていただきます。よろしくお願いいたします。 https://okwave.jp/qa/q9018234.html
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- nda23
- ベストアンサー率54% (777/1415)
SQLで解決します。 AccessではVBAを使う方法もありますが、 経験的に1000倍以上遅いです。 SQLは理論構成が大切なので、先ず文書で 表現することを考えます。 ①コード毎に積載の合計値を累計として考える。 SELECT A.コード,SUM(A.積載) AS 累計 FROM テーブル AS A GROUP BY A.コード 意味:コード毎にグループ化して、 積載の合計値を求める。 ②配送の昇順に累計する。 コード 配送 累計 20011 01 400 ← 配送(01)だけの値 20011 02 980 ← 配送(01)+配送(02)の値 SELECT A.コード,A.配送,SUM(B.積載) AS 累計 FROM テーブル AS A LEFT JOIN テーブル AS B ON A.コード=B.コード AND A.配送>=B.配送 GROUP BY A.コード,A.配送 意味:自身のデータから、コード毎に、自分より 配送が等しいか、小さいものを集計する。 尚、結合式に不等号があるので、クエリビルダでは 作成できません。クエリビルダを開き、SQLの 直接入力モードで、上記のSQLを記述します。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.2の別の個所訂正です。 > 古い順番に連番と つい連番と書きましたが、連番でなくても古いものから昇順で並んでいる数値であればいけます。
- kkkkkm
- ベストアンサー率66% (1719/2589)
No.2の訂正です。 VBAだけでSQLを実行する場合のコードは以下にしてください。 Sub Test() Dim SQL_Str As String SQL_Str = "UPDATE T_Access累計 SET T_Access累計.累計 = " & _ "CLng(DSum(""積載"",""T_Access累計"",""コード = "" & " & _ "[コード] & "" AND ID <= "" & [ID]));" DoCmd.SetWarnings False DoCmd.RunSQL SQL_Str DoCmd.SetWarnings True End Sub
- kkkkkm
- ベストアンサー率66% (1719/2589)
累計フィールドにコード毎の「累計」を直接書き込むとして データにIDというオートナンバー型を作成して、古い順番に連番が振られるようにしてください。 古い順番に連番となっているデータがあれば、SQL文の中のIDをそのフィールド名にしてください。 テーブル名は「T_Access累計」としていますので実際のテーブル名に変更してください。 更新クエリを作る場合は 空の更新クエリに「T_Access累計」を追加し 更新クエリのフィールドに「累計」をセットして レコードの更新に以下の式を入れてください CLng(DSum("積載","T_Access累計","コード = " & [コード] & " AND ID <= " & [ID])) VBAで以下のコードを実行してください。 「Q_Access累計」はクエリの名前です。 Sub Test2() DoCmd.SetWarnings False DoCmd.OpenQuery "Q_Access累計" DoCmd.SetWarnings True End Sub 更新クエリを作らずにVBAだけでSQLを実行する場合は Sub Test() Dim SQL_Str As String SQL_Str = "UPDATE T_Access累計 SET T_Access累計.累計 = " _ & "CLng(DSum(" & """積載""" & "," & """T_Access累計""" & "," _ & """コード = """ & "& [コード] & " & """ AND ID <= """ & " & [ID]));" DoCmd.SetWarnings False DoCmd.RunSQL SQL_Str DoCmd.SetWarnings True End Sub
- dell_OK
- ベストアンサー率13% (766/5721)
クエリーで書くと、こんな感じでしょうか。 SELECT a.コード, a.積載, a.配送, Sum(b.積載) AS 累積 FROM テーブル1 AS a, テーブル1 AS b WHERE a.コード >= b.コード GROUP BY a.コード, a.積載, a.配送 ORDER BY a.コード