• ベストアンサー

集計

基礎的な質問ですみません。 VB6.0 SQLで開発しています。 テーブルm_A             テーブルm_B 品番  棚番  個数     品番  品名  仕入単価 001  A-1   10      001  あいう     5 002  B-1   20      002  かきく     6 001  C-2   15      001  あいう     5 002  B-2   13      002  かきく     6 003  C-5   20      003  さしす    7 これを下記の状態で出力は出来たのですが Dim strSQL As String Dim adoRs As New ADODB.RecordSet '----- SQL文作成 ----- strSel = "SELECT" strSel = strSel & ",A.品番" strSel = strSel & ",B.品名" strSel = strSel & ",A.棚番" strSel = strSel & ",A.個数" strSel = strSel & ",B.仕入単価 " strFro = " FROM m_A AS A" strFro = strFro & " LEFT JOIN m_B AS B ON A.品番=B.品番" strOrd = " ORDER BY" strOrd = strOrd + " A.品番" strSQL = strSel + " " + strFro + " " + strWhe + " " + strOrd 品番  棚番  個数  品名  仕入単価 001  A-1   10   あいう     5 002  B-1   20   かきく     6 001  C-2   15   あいう     5 002  B-2   13   かきく     6 003  C-5   20   さしす    7 下のように品番ごとに集計をしたいのですがどうすればいいのでしょうか? お願いします。 品番  個数  品名  仕入単価 001  25   あいう     5 002  33   かきく     6 003  20   さしす    7

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

  • ベストアンサー
noname#221739
noname#221739
回答No.3

↓で、どうでしょう? NVL()は Oracle 関数なんで、そこは利用する RDBMS に応じて読み替えて下さい。 SELECT C.品番 ,C.個数 ,B.品名 ,B.仕入単価 FROM (  SELECT A.品番 ,SUM( NVL( A.個数, 0 ) ) AS 個数  FROM m_A A  WHERE 必要な条件  GROUP BY A.品番 ) C  LEFT JOIN m_B B  ON B.品番 = C.品番 ORDER BY C.品番

kinoko731
質問者

お礼

ありがとうございます。 うまく出来ました。

その他の回答 (2)

回答No.2

SELECT C.品番,SUM(C.個数) AS 個数,C.品名,C.仕入単価 FROM ( SELECT A.品番,B.品名,A.棚番,A.個数,B.仕入単価 FROM m_A AS A LEFT JOIN m_B AS B ON A.品番=B.品番 ) AS C GROUP BY C.品番,C.品名,C.仕入単価 でどうでしょうか?

kinoko731
質問者

お礼

ありがとうございます。 うまく出来ました。

  • driverII
  • ベストアンサー率27% (248/913)
回答No.1

GROUP BY と SUM 関数でしょうね。

参考URL:
http://www.atmarkit.co.jp/fnetwork/rensai/sql03/sql1.html

関連するQ&A

  • 2つのテーブルを結合

    VB6.0 SQL SERVER winXP にて開発中です。 よろしくお願いします。 2つのテーブルを結合したいと思っています m_seihinというテーブルに 品番  品名   12   あいう  13   かきく  m_tanabanというテーブルに 棚番 品名 333  あいう  555  かきく があります。 TDBGridに品番を入力するとm_seihinの品名と m_tanabanの棚番を表示させたいのですが 例えば12と入力すると あいう 333 教えてください。

  • ExcelのVLOOKUP関数について教えて下さい。

    こんばんは。 下の表をExcelでVLOOKUP関数を使用して、品名と単価を求めたいのですがうまくできません。 エラーがでるそうなのですが、品名のところに1000が表示されます。 絶対参照は使用しました。 どなたかやり方を詳しく教えていただけないでしょうか? よろしくお願いします。 (ケーキ売上日計表) A列4に伝票番号、B4品番、C4品名、D4数量、E4単価、F4売上金額です。 伝票番号 品番 品名 数量 単価 売上金額 1 K001 256 2 M002 157 3 M001 219 4 K002 135 (品名別金額一覧表) A11~C15に 品番 品名 単価 M001 丸型クリーム 2,000 M002 丸型チョコ 3,500 K001 角型クリーム 3,000 K002 角型チョコ 2,500

  • エクセルでの簡単な集計について

     A B C D E F ・・・・W X 1 2 3 4 1の行に単価、2~4の行は個数です Xの列に単価*個数の合計を各行ごとに出したい。 なるべく簡単な式を教えてください。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • 【excelマクロVBA】表の集計・転記マクロの改造点について

    以前、こちらのカテゴリーで重複をチェックしてその行を削除し表を整頓するマクロとしてプログラムを教えて頂きました。    (資材受け入れシート)  →   (Sheet2) 受入日 品名  Lot  数量   受入日 品名  Lot  数量   7/7   A  BNR32  10    7/8   A  BNR32  15   7/8   A  BNR32  5    7/10   B  SW200  14   7/10   B  SW200  2 →  7/7   B  AE860  4   7/7   B  AE860  4    7/9   C  GD300  11   7/8   B  SW200  12    7/7   C  DC200  7   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 プログラムの内容は、 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0        Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub と記述されており、正常に動作いたしました。 ところが、会社から受入日,品名,Lot,数量だけでなく、納入業者,賞味期限,担当者の項目(列)を追加し転記できるように欲しいと命じられました。業務の都合上、列の順番は受入日,<納入業者>,品名,Lot,<賞味期限>,数量,<担当者>の順番で挿入し、追加した3項目については計算させる必要は無く、転記だけさせたいと考えています。上のプログラムを元に改造を試みたのですが、転記が上手くできません。どこの部分にどのように記述・変更したら良いのかが分りません。どなたかご存知の方、お教え願えませんでしょうか?表の作成までにもう少しというところで躓いてしまい頭を悩ませております。初歩的な質問かもしれませんが、宜しくお願い致します。

  • エクセルVBAでエラー!

    エクセルでVBAを組んでいます。 Aシート・Bシートにデータがあり、それをSQLで集計し、 Cシートに出力をしたいのですが、 『リンクされているExcelのワークシートを表示するための接続が切断されました。』 というエラーが出て、解決しません。 (調べてみましたが、似たような例がなく解決には至りませんでした・・・。) どなたかご教示お願い致します。 Private Sub CommandButton1_Click() Dim dbCon As Object Dim dbCols As Object Dim dbRes As Object Dim strSQL As String Dim sh1 As Worksheet Set sh1 = Worksheets("Cシート") Set dbCon = CreateObject("ADODB.Connection") dbCon.Provider = "Microsoft.Jet.OLEDB.4.0" dbCon.Properties("Extended Properties") = "Excel 8.0" dbCon.Open ThisWorkbook.FullName strSQL = "" strSQL = strSQL & "SELECT *" strSQL = strSQL & vbCrLf & "FROM [Aシート$] LEFT JOIN [Bシート$] ON [Aシート$].NO= [Bシート$].NO" Set dbRes = CreateObject("ADODB.Recordset") dbRes.Open strSQL, dbCon, adOpenKeyset, adLockReadOnly sh1.Range("A1").CopyFromRecordset dbRes dbRes.Close Set dbRes = Nothing dbCon.Close Set dbCon = Nothing End Sub

  • 組み合わせごとの集計の仕方を教えてください

    エクセルでの集計の仕方を教えてください。 分類A~Cの中からそれぞれ好きなものを1つずつ選択してもらい1セットで売るという商品があるとします(3品1セット)。 受注データを集計し、人気の組み合わせをランク付けしたい場合どのような方法があるでしょうか? 分類  品番   品名 A    A1   Tシャツ1     A2   Tシャツ2 B    B1   ジャケット1     B2   ジャケット2 C    C1   スカート1     C2   スカート2 受注データは以下のような形で出ます。 <受注データ> 注文番号  品番  品名     数量 1001    A1   Tシャツ1   1 1001    B1   ジャケット1  1 1001    C2   スカート2   1 1002    A2   Tシャツ2    1 1002    B2   ジャケット2  1 1002    C2   スカート2   1 1003    A2   Tシャツ2   1 1003    B2   ジャケット2  1 1003    C2   スカート2   1 1004    A1   Tシャツ1   1 1004    B1   ジャケット1  1 1004    C2   スカート2   1 1005    A1   Tシャツ1   1 1005    B1   ジャケット1  1 1005    C2   スカート2   1 ・ ・ ・ いろいろと試してみたのですがなかなかうまくいきません。 組み合わせごとの集計というところがポイントです。 どうぞよろしくお願いいたします。

  • AccessでSQL結果を直接csvに書き出すには?

    Access2003,WinXP お世話になります。 自作のSQLを書いて、結果をTransferTextで手軽にCSVにできないかと考えてこんなのを書いてました。 Dim strSql AS String Dim strPath AS String strSql = 自作SQL文 strPath = c:\test.csv Docmd.TransferText acExportDelim, , strSql, strPath, True しかし、TransferTextでは「テーブル」か「クエリ」名を直接書くように指示してあり、これだと動かない?んでしょうか。 SQLは300個くらい出力する必要があるため(クエリ300個作れば解決するのですが・・・)上のようなコードをループして動かしたいのですが、何か他の簡単な出力方法があるのでしょうか。 よろしくお願いいたします。

  • Excelでの集計その2

    以前、似た質問をしたものです。下記のケース を、Excel(Excel2000)で作れるでしょうか 次のようなデータが10000件ほどあります。 ------------- (A)--------------------------- 行 商品コード 品名 品番  数量   金額 1 10010005   A商品 A-005  5   1000 2 10010006   B商品 B-006  5   1050 3 10010006  B商品 B-006  6   1100 4 10010007   C商品 C-007  10   100 5 10010008   D商品 D-008   6   60 6 10010009   E商品 E-009   3   300 7 10010010   F商品 F-010  7   700 8 10010010   F商品 F-010   3   300 ------------- (B)--------------------------- 行 商品コード 品名 品番  数量   金額 1 10010005   A商品 A-005  5   1000 2 10010006   B商品 B-006  11   2150 3 10010007   C商品 C-007  10   100 4 10010008   D商品 D-008   6   60 5 10010009   E商品 E-009   3   300 6 10010010   F商品 F-010  10   1000 ------------------------------------------------- (A)のような商品コードが一部同じデータを商品コードをキーにして、数量、金額を集計して(B)のようにしたいのですが、Excelでどのようにしたら出来るでしょうか? よろしくお願いします。

  • エクセル VBA SQL 開始行の指定

    namatyu MC285Pさんの質問からの解答を利用させていただいて、会社の履歴表を作成しましたが、訳あって、(資材受け入れシート)側の開始行をA1からA2に変えた所、「パラメータがすくなすぎます。14を指定してください」と出てしまいます。 Sheets("資材受け入れシート").Range("A1:D1").Copyを Sheets("資材受け入れシート").Range("A2:D2").Copyに変えても解決しません… SQL文が勉強不足で、変更場所が分かりません   1   2   3  4  受入日 品名  Lot  数量   7/7   A  BNR32  10   7/8   A  BNR32  5   7/10   B  SW200  2   7/7   B  AE860  4   7/8   B  SW200  12   7/9   C  GD300  10   7/7   C  GD300  1   7/7   C  DC200  7 Sub test()   Dim strSql As String   Dim cnXL As Object   Dim rsXL As Object   Const adOpenForwardOnly = 0         Sheets("資材受け入れシート").Range("A1:D1").Copy   Sheets("資材受け入れシート").Paste Destination:=Worksheets("Sheet2").Range("A1:D1")   Application.CutCopyMode = False      Set cnXL = CreateObject("ADODB.Connection")   Set rsXL = CreateObject("ADODB.Recordset")   With cnXL     .Provider = "MSDASQL"     .ConnectionString = "Driver={Microsoft Excel Driver (*.xls)};" & _     "DBQ=" & ThisWorkbook.FullName & "; ReadOnly=True;"     .Open   End With   strSql = "select max(受入日) as 日付,品名,Lot,sum(数量) as 合計" _         & " from [資材受け入れシート$]" _         & " group by 品名,Lot order by max(受入日),品名,Lot"      Debug.Print strSql   rsXL.Open strSql, cnXL, adOpenForwardOnly   Worksheets("sheet2").Cells(2, 1).CopyFromRecordset rsXL   Worksheets("sheet2").Columns("A:A").NumberFormatLocal = "m/d"      rsXL.Close: Set rsXL = Nothing   cnXL.Close: Set cnXL = Nothing   MsgBox "Sheet2に出力しました" End Sub 色々、試したのですが、分かりません… すいませんが、どたたか教えてください、お願いします。

専門家に質問してみよう