• 締切済み

複数の列の値が一致するときに行を集約して集計する方法

Viaual Basic 6 を SQL Server2000 に接続しています。 ファイルの中に下記のようなレコードがあります。 --------------------------------- 得意先 │ 営業所   │ 金額 --------------------------------- 青木  │ 78951   │ 2565 青木  │ 78951   │ 2569 田中  │ 98512   │ 9863 「得意先」と「営業所」が一緒なら金額を足して一つのレコードとしてまとめて出力したいのです。 --------------------------------- 得意先 │ 営業所  │ 金額 --------------------------------- 青木  │ 78951   │ 5134 田中  │ 98512   │ 9863 SELECT SUM と ORDER BYを組み合わせればできるかと思ったのですが。。 よろしくお願いいたします。

みんなの回答

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.1

select 得意先, 営業所, sum(金額) from テーブル名 group by 得意先, 営業所

kistune
質問者

お礼

どうもありがとうございます!

関連するQ&A

  • SQLでの集計について

    こんにちわ。以下のようなテーブルから条件に見合う合計を出したいと思いSQLを書いてみたのですが、 思った結果になりません。 テーブルA ID1 得意先Cd 営業所Cd 日付 1  001    001  2005/09/01 2  001    002  2005/09/01 3  001    001  2005/09/03 テーブルB ID2 ID1 部署 数量 金額 1  1  01  1  1000 2  1  01  1  1000 3  1  02  1  1000 4  2  01  1  1000 5  2  01  1  1000 6  3  01  1  1000 7  3  01  1  1000 8  3  02  1  1000 [抽出結果] 得意先Cd 営業所Cd 日付  部署 数量(Sum) 金額(Sum) 001    001  2005/09/01 01   2   2000 001    001  2005/09/01 02   1   1000 001    001  2005/09/03 01   2   2000 001    001  2005/09/03 02   1   1000 001    002  2005/09/01 01   2   2000 [SQL] select 得意先Cd,営業所Cd,日付,部署,SUM(数量) As '数量計',SUM(金額) As '金額計' from テーブルA AA Inner join テーブルB BB ON (AA.ID1 = BB.ID1) group by 得意先Cd,営業所Cd,日付,部署,数量,金額 order by 得意先Cd,営業所Cd,日付,部署 このSQLを実行すると、日付、部署共に同じ場合でも数量・金額が合計値となりません。 得意先Cd 営業所Cd 日付  部署 数量 金額 001    001  2005/09/01 01 1  1000 001    001  2005/09/01 01 1  1000 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。

  • 【Excel】複数行のデータを1行に集計したいです。

    下記のような表で、物件番号ごとに金額を集計したいのですが どうしたらいいでしょうか? 集計は別シートにしたいと考えています。 C列→物件番号 D列→得意先名 E列→物件名 I列→担当者 L列→金額 11223344   ○○(株)  ○○ホテル   伊藤   25,000 11223344   ○○(株)  ○○ホテル   伊藤   130,000 22334455   △△(株)  △△ホテル   永沢   100,000   33445566 □□(有)  ホテル□□   田中   500,000 33445566   □□(有)  ホテル□□   田中   50,000 ↓下記のように集計 C列→物件番号 D列→得意先名 E列→物件名 I列→担当者 L列→金額 11223344   ○○(株)  ○○ホテル   伊藤   155,000 22334455   △△(株)  △△ホテル   永沢   100,000   33445566 □□(有)  ホテル□□   田中   550,000 Excel2003を使用しています。 よろしくお願いします!

  • MySQLで対象期間を決め集計しランキングする方法

    MySQLの初心者ですが、対象期間で集計を行いランキング付けし任意の上位何位までを抽出する方法について教えてください。 全データから集計後上位5位を選ぶ場合・・同順有り select x.`品名`,x.kei,(select count(*)+1 from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) y where x.kei<y.kei ) as rank from (select `品名`,sum(`金額`) as kei from uriage group by `品名`) x having rank <= 5 order by rank といろいろ参考にしてで出来ましたが。任意の対象期間(日付)を設定して実行するSQL文が思いつきません。どこに期間を挿入するのか・・・悪あがきで思い付いた方法として CREATE OR REPLACE VIEW uriage_01 AS SELECT `品名`,SUM(`金額`) AS `金額` FROM uriage WHERE `日付` BETWEEN "2001/01/01" AND "2001/01/31" GROUP BY `品名` で任意期間の集計結果のビューを作りそのビューから select r1.`品名` as `品名`, r1.`金額` as p, count(r2.`金額`)+1 as rank from uriage_01 as r1 left join uriage_01 as r2 on r1.`金額` < r2.`金額` group by r1.`品名` having rank <= 5 order by rank と手間の掛かる方法です。単純に5行だけに限定ならorder by `金額`Limit 5 にすれば良いだけですけど・・・同順があるとどうすれば良いのかと思考停止状態です。尚、当方は、MySQLの勉強を始めたばかりにですので宜しくお願いいたします

    • ベストアンサー
    • MySQL
  • クロス集計の値の表示(access)

    access2000でクロス集計を作成しましたが、値が空白の部分があり、CLng(値)で表示しようとするとエラーになります。下記の「Sum(マスター.金額)」の部分にCLngを付けるためにはどのようにしたらよいものでしょうか。 TRANSFORM Sum(マスター.金額) AS 金額の合計 SELECT マスター.収支区分, CLng(Sum(マスター.金額)) AS [合計金額] FROM マスター GROUP BY マスター.収支区分 PIVOT マスター.施設区分; #accessの初心者です。

  • MySQLで集計後の値の合計方法について

    現在,MySQLを使用して,データベースを作成しています. 品番と,指定した期間以前のデータの数量を合計しようと思い,下記のようなSQLを実行してみました. select 品番,期間,sum(数量) as sumQuantity ftom 履歴 where 品番 = 'A' and 期間 <= '1302' group by 品番,期間 (期間は2013/02なら12/11になり,さらに / を除去した値です) 結果が添付図のようになりました. さらに,この結果のsumQuantityの合計を求めるにはどのようなSQLを記述すればよいでしょうか? サブクエリを使用するのかな?と思いましたが,うまく記述できませんでした. お分かりになられる方がいらっしゃいましたら,ご教授お願い致します.

    • ベストアンサー
    • MySQL
  • 日付毎の集計方法

    下記のようなテーブル構成で、過去一週間の毎日について、登録した人の数を知りたいです。 ■テーブル名 my_table システムに登録すると,IDが付与され,登録した日付が記録されます。 ---------------------------------------- id(intger) | reg_date(登録した日付,timestamp) ---------------------------------------- 以下のようなSQLを考えたのですが、timestampが「2005-12-01 00:00:00+09」という細かい日付になっているので、これでは「1日」毎の集計にはなりません。 この場合、どう表現すればよいでしょうか? SELECT sum(reg_date) from my_table where ('now' - reg_date < '7days') GROUP BY reg_date order by reg_date

  • SQLでGROUP項目を列表示する方法?

    SQLでGROUP後の結果を列で効率よく取得する方法を教えてください。(Oracle8.1.7) 現状は下記SQLで列表示していますが、あまり良い方法ではないと思います。別の取得方法があれば教えてください。 ○出力したい結果 担当CD1 4月金額 5月金額 担当CD2 4月金額 5月金額 ○現状SQL問題点 ・一応取得可能ですがこれだと月数分毎回GROUPするので時間が勿体無いと思います。 ・T1で4月~5月を範囲でGROUP後、その結果を4月分、5月分と抽出だけしたいのですが可能でしょうか? ・もっと他に効率よい取得方法があれば教えてください。 ○現状のSQL内容 (SELECT A.TANTOCD, T1.KIN1 KINGAKU1, T2.KIN2 KINGAKU2 FROM (SELECT YYMM,TANTOCD FROM TBL WHERE YYMM >= 200204 AND YYMM <= 200205 GROUP BY YYMM,TANTOCD ) A, (SELECT YYMM,TANTOCD,SUM(KIN) KIN1 FROM TBL WHERE YYMM ='200204' GROUP BY YYMM,TANTOCD) T1, (SELECT YYMM,TANTOCD,SUM(KIN) KIN2 FROM TBL WHERE YYMM ='200205' GROUP BY YYMM,TANTOCD) T2 WHERE A.TANTOCD = T1.TANTOCD(+) AND A.TANTOCD = T2.TANTOCD(+));

  • Selectした時のレコードの取得順

    SQL Server2005 で開発しています。 Order by で並び替えてレコードをSelectする際に、 Order by の対象列データが同じ場合は、 どういった順番でレコードが取得できるのでしょうか? TableA No | Data1 | Data2   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500 (Noはクラスタ化PK) 例えば、上のようなテーブルから次のSQLを実行すると  (1)Select * From TableA ;  (2)Select * From TableA Order by Data1 Asc;  (3)Select * From TableA Order by Data1 Asc, No Asc;  (1)(2)(3)全て、次の順で返ってきました。   1| AAA | 100   2| AAA | 200   3| AAA | 300   4| ABC | 400   5| BBB | 500  しかし、(2)のSQLは、データによって  次の順で返ってくることがありました。   3| AAA | 300   1| AAA | 100   2| AAA | 200   4| ABC | 400   5| BBB | 500    1~3レコード目までは全てData1がAAAのレコードですが  特に指定していなくても、No(PK)の順になるのかと思っていました。    なお、レコードができた(Insert順)でもなさそうです。  この、順番は何で決まっているのでしょうか?  

  • GROUP BYと副問い合わせ

    SQLで悩んでいるので質問いたします。 テーブル例 日付 タイプ 個数  0901  1    5 0901  1    3 0901  2    2 0901  2    4 0901  3    1 0901  3    2 0902  1    5 0902  1    3 : : とあります。 このデータを日付毎、タイプ毎に個数を取得したいと考えています。 そこで下記のようにSQLを実行 SELECT 日付、sum(個数)asタイプ別個数、タイプ count(*) as タイプ別レコード数 FROM テーブル名 GROUP BY 日付、タイプ ORDER BY 日付、タイプ 取得できるレコードは下記のようになります。 日付 タイプ別個数 タイプ タイプ別レコード数 0901      8    1     2 0901      6    2     2 0901      3    3     2 : となります。 ここまでは簡単にいけたのですが、 できればタイプ別の個数を日付で1レコードで取得できないかと悩んでいます。 期待している取得レコードは下記です。 日付 タイプ1個数 タイプ2個数 タイプ3個数 レコード数 0901     8      6      3      6 0902 : このようにするためにSELECT部分に副問い合わせをしようとしていますがうまくいきません。 SQLで出来る方法があれば、教えてください。 よろしくお願いします。

  • 複数のレコードの値を取り出すには

    初心者です。あるカラムから複数のレコードの値を取り出すにはどのように書けばよいかどなたか教えていただけますでしょうか。 下記のコードではcalendartblというテーブルから1レコードのみ取り出せます。 テーブル:calendartbl holiday(カラム名) 2016/9/12(レコード1行目) 2016/9/14(レコード2行目) 2016/9/20(レコード3行目) 2016/9/26(レコード4行目) 2016/9/28(レコード5行目) コード: $sql = "SELECT calendartbl.holiday FROM calendartbl"; $ret = f_db_select($sql); foreach ($ret as $h){ $holiday = $h['holiday']; } 結果=2016/9/12 では複数のレコード、つまり「2016/9/12、2016/9/14、2016/9/20、2016/9/26、2016/9/28」を取り出して、上記の$holidayに代入させるにはどのように書けばよいでしょうか。 どなたか教えて頂けたら幸いです。 よろしくお願い致します。

    • 締切済み
    • PHP