過去ログ

                                Page      71
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
   通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫   
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
 ▼報告書データベースの作成  SCT 02/10/15(火) 23:43
   ┗Re:報告書データベースの作成  しろくろやぎ 02/10/16(水) 14:29
      ┗Re:報告書データベースの作成  SCT 02/10/16(水) 16:41
         ┗Re:報告書データベースの作成  しろくろやぎ 02/10/16(水) 20:47
            ┣Re:報告書データベースの作成  孫悟空 02/10/17(木) 2:30
            ┃  ┣Re:報告書データベースの作成  SCT 02/10/17(木) 10:51
            ┃  ┗Re:報告書データベースの作成  SCT 02/10/20(日) 21:35
            ┃     ┗Re:報告書データベースの作成  孫悟空 02/10/22(火) 0:51
            ┃        ┗Re:報告書データベースの作成  SCT 02/10/22(火) 20:13
            ┗Re:報告書データベースの作成  SCT 02/10/20(日) 21:45

 ───────────────────────────────────────
 ■題名 : 報告書データベースの作成
 ■名前 : SCT <MEMENT_MORI@excite.co.jp>
 ■日付 : 02/10/15(火) 23:43
 -------------------------------------------------------------------------
   はじめまして。
職場で事故報告書データベースの作成を任されまして、現在基礎研究中の身です。
さて、
報告年月日
事故項目:複数の項目があり、報告者に選択させる
事故詳細
のテーブルがあるとして、
○○年△△月〜▲▲月までの各事故項目の発生件数
(指定期間での項目A発生は■件、項目Bは●件…)
を一括で表示させるにはどのようにしたら良いでしょうか?
各項目ひとつ単位での件数表示ならワタシでもできたのですが、
一括表示となるといまひとつ上手く思いつきません。
表示法と併せて項目の選択方式についてもアドバイスをお願いいたします。
情報提示の不備等ございましたらご指摘ください。すぐにお返事いたします。
よろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : しろくろやぎ  ■日付 : 02/10/16(水) 14:29  -------------------------------------------------------------------------
   >報告年月日
>事故項目:複数の項目があり、報告者に選択させる
>事故詳細
>のテーブルがあるとして、
>○○年△△月〜▲▲月までの各事故項目の発生件数
>(指定期間での項目A発生は■件、項目Bは●件…)
>を一括で表示させるにはどのようにしたら良いでしょうか?

指定期間内で月次毎に出す必要はないんですね?

なら、グループ指定を使われると良いと思います。
クエリーを作られる際、メニューで「表示(V)」→「集計(O)」を
選択し、各フィールドの「集計」行を以下のように設定します。

報告年月日:Where条件
事故項目:グループ
事故詳細:カウント

SQL表示では「.... GROUP BY 事故項目 ....」となるはずです。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : SCT <MEMENT_MORI@excite.co.jp>  ■日付 : 02/10/16(水) 16:41  -------------------------------------------------------------------------
   しろくろやぎ さん、回答有難うございます。
申しわけありません。
月次ごとの件数を指定ヶ月分、同一画面で表示&印刷する必要があるんです。
どうぞよろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : しろくろやぎ  ■日付 : 02/10/16(水) 20:47  -------------------------------------------------------------------------
   >月次ごとの件数を指定ヶ月分、同一画面で表示&印刷する必要があるんです。

となると、報告年月日から年月のみを取り出し、そのフィールドも
グループ指定する必要があります。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : 孫悟空  ■日付 : 02/10/17(木) 2:30  -------------------------------------------------------------------------
   しろくろやぎさん,SCTさんこんばんは、横レス失礼します。

テーブルの定義が以下のようなら
CREATE TABLE JIKO_HOUKOKU_TBL
(
報告年月日 DATE NOT NULL,
事故項目 TEXT(10) NOT NULL,
事故詳細 MEMO
)

私は以下のようなモジュールで集計をやっています。
ご参考まで。。。

Option Compare Database
Option Explicit

Sub CROSS_SHUUKEI()
  Dim KIKAN, SQLStr, SelectSQL, WhereSQL As String
  Dim Db As DAO.database
  Dim 年月_Rs As DAO.Recordset
  Dim QueryName, 集計Query As Variant
  
  Set Db = CurrentDb
  For Each QueryName In Db.QueryDefs
    If QueryName.Name = "集計Query" Then
      Db.QueryDefs.Delete "集計Query"
    End If
  Next QueryName
  
  'データ内にある年月を抜き出し
  SQLStr = ""
  SQLStr = SQLStr & "SELECT DISTINCT" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Year(報告年月日) & iif(len(Month(報告年月日))=1," & _
    "'0' & Month(報告年月日),Month(報告年月日)) AS 年月" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "FROM JIKO_HOUKOKU_TBL" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "ORDER BY" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Year(報告年月日) & iif(len(Month(報告年月日))=1," & Chr(13) & Chr(10)
  SQLStr = SQLStr & "'0' & Month(報告年月日),Month(報告年月日))"
  
  '年月のレコードセット
  Set 年月_Rs = Db.OpenRecordset(SQLStr, dbOpenDynaset)
  
  'SQLを作成する
  SelectSQL = ""
  Do While Not 年月_Rs.EOF
   If SelectSQL = "" Then
    SelectSQL = SelectSQL & "SUM(iif(Year(報告年月日) & " & _
     "iif(len(Month(報告年月日))=1,'0' & Month(報告年月日)," & _
     "Month(報告年月日))='" & 年月_Rs("年月").Value & "',1,0)) as " & _
     年月_Rs("年月").Value & Chr(13) & Chr(10)
     Else
     SelectSQL = SelectSQL & ",SUM(iif(Year(報告年月日) & " & _
     "iif(len(Month(報告年月日))=1,'0' & Month(報告年月日)," & _
     "Month(報告年月日))='" & 年月_Rs("年月").Value & "',1,0)) as " & _
     年月_Rs("年月").Value & Chr(13) & Chr(10)
    End If
    DoEvents
    年月_Rs.MoveNext
  Loop


  SQLStr = ""
  SQLStr = SQLStr & "SELECT" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "事故項目," & Chr(13) & Chr(10)
  SQLStr = SQLStr & SelectSQL
  SQLStr = SQLStr & "FROM" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "JIKO_HOUKOKU_TBL" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "GROUP BY" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "事故項目"
  
  '求めるクエリーを作成する。
  Set 集計Query = Db.CreateQueryDef("集計Query")
  集計Query.SQL = SQLStr

End Sub

DAOを使ってますので参照設定を忘れずに。
外れでしたらゴメンです。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : SCT <MEMENT_MORI@excite.co.jp>  ■日付 : 02/10/17(木) 10:51  -------------------------------------------------------------------------
   孫悟空 さん、しろくろやぎさん
アドバイスありがとうございます。
当方の技量ではアドバイスの検証に時間がかかりそうなので、
充分に咀嚼してから、再び質問することがあるかもしれませんが
よろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : SCT <MEMENT_MORI@excite.co.jp>  ■日付 : 02/10/20(日) 21:35  -------------------------------------------------------------------------
   孫悟空さん
こんばんは。SCTです。
ご教示下さったコードにて『集計Query』を出力することができました。
さらに質問を追加させてください。この『集計Query』で得られた集計結果を利用して
・月の総件数
・項目ごとの総件数
・グラフ表示
を行わせるには、どうしたらよいでしょうか?
どうぞよろしくお願いいたします。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : 孫悟空  ■日付 : 02/10/22(火) 0:51  -------------------------------------------------------------------------
   基本的には、前回回答のSQLを少し簡単にするだけです。
・月の総件数
Option Compare Database
Option Explicit

Sub CROSS_SHUUKEI()
  Dim SQLStr, SelectSQL As String
  Dim Db As DAO.Database
  Dim 年月_Rs As DAO.Recordset
  Dim QueryName, 集計Query As Variant
  
  Set Db = CurrentDb
  For Each QueryName In Db.QueryDefs
    If QueryName.Name = "集計Query" Then
      Db.QueryDefs.Delete "集計Query"
    End If
  Next QueryName
  
  'データ内にある年月を抜き出し
  SQLStr = ""
  SQLStr = SQLStr & "SELECT DISTINCT" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Year(報告年月日) & iif(len(Month(報告年月日))=1," & _
    "'0' & Month(報告年月日),Month(報告年月日)) AS 年月" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "FROM JIKO_HOUKOKU_TBL" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "ORDER BY" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Year(報告年月日) & iif(len(Month(報告年月日))=1," & Chr(13) & Chr(10)
  SQLStr = SQLStr & "'0' & Month(報告年月日),Month(報告年月日))"
  
  '年月のレコードセットの抜き出し
  Set 年月_Rs = Db.OpenRecordset(SQLStr, dbOpenDynaset)
  
  SelectSQL = ""
  Do While Not 年月_Rs.EOF
   If SelectSQL = "" Then
    SelectSQL = SelectSQL & "SUM(iif(Year(報告年月日) & " & _
     "iif(len(Month(報告年月日))=1,'0' & Month(報告年月日)," & _
     "Month(報告年月日))='" & 年月_Rs("年月").Value & "',1,0)) as " & _
     年月_Rs("年月").Value & Chr(13) & Chr(10)
     Else
     SelectSQL = SelectSQL & ",SUM(iif(Year(報告年月日) & " & _
     "iif(len(Month(報告年月日))=1,'0' & Month(報告年月日)," & _
     "Month(報告年月日))='" & 年月_Rs("年月").Value & "',1,0)) as " & _
     年月_Rs("年月").Value & Chr(13) & Chr(10)
    End If
    DoEvents
    年月_Rs.MoveNext
  Loop

  SQLStr = ""
  SQLStr = SQLStr & "SELECT" & Chr(13) & Chr(10)
  SQLStr = SQLStr & SelectSQL
  SQLStr = SQLStr & "FROM" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "JIKO_HOUKOKU_TBL"
  
  Set 集計Query = Db.CreateQueryDef("集計Query")
  集計Query.SQL = SQLStr
End Sub

・項目ごとの総件数
Option Compare Database
Option Explicit

Sub CROSS_SHUUKEI()
  Dim SQLStr As String
  Dim Db As DAO.Database
  Dim QueryName, 集計Query As Variant
  
  Set Db = CurrentDb
  For Each QueryName In Db.QueryDefs
    If QueryName.Name = "集計Query" Then
      Db.QueryDefs.Delete "集計Query"
    End If
  Next QueryName

  SQLStr = ""
  SQLStr = SQLStr & "SELECT" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "事故項目," & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Count(事故項目) as 総件数" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "FROM" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "JIKO_HOUKOKU_TBL" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "Group BY" & Chr(13) & Chr(10)
  SQLStr = SQLStr & "事故項目"
  
  Set 集計Query = Db.CreateQueryDef("集計Query")
  集計Query.SQL = SQLStr

End Sub

・グラフ表示
申し訳ありませんが、アクセスのグラフ機能は、使った事がありません。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : SCT <MEMENT_MORI@excite.co.jp>  ■日付 : 02/10/22(火) 20:13  -------------------------------------------------------------------------
   孫悟空さん、
こんばんは。SCTです。
早速の回答有難うございます。
非常に参考になり、勉強不足を痛感いたしました。
SQLはスゴク便利なものなんですね…。
SQLについて、これからは注目して書店を回ってみようと思います。
どうも有難うございました。

 ───────────────────────────────────────  ■題名 : Re:報告書データベースの作成  ■名前 : SCT <MEMENT_MORI@excite.co.jp>  ■日付 : 02/10/20(日) 21:45  -------------------------------------------------------------------------
   しろくろやぎさん
こんばんは。SCTです。
全く使用したことが無かった「集計クエリ」の示唆をくださって有難うございました。
月次別集計は孫悟空さんのコードを使わせて頂く方向でテストしていますが、
ご教示くださった方法は違う条件での集計にまだまだ使えそうなものですね。
やはり、アクセスは奥が深いです。
どうもありがとうございました。
孫悟空さんへのレスに記載した、更なる質問についてアイデアがございましたら
ご教示くださいますようお願いいたします。

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━    通常モードに戻る  ┃  INDEX  ┃  ≪前へ  │  次へ≫    ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━                                 Page 71