• 締切済み

MysqlでSUMをつかうとおもうのですが、、、。

PHPとMySQLを使ってやっています。 以下のように予約テーブルとエージェントテーブルがあります。 予約テーブル                         予約ID  名前   電話番号 エージェント  人数    11  鈴木   ********   11    1     12  佐藤   ********   12    5     13  田中   ********   12    2     14  木村   ********   13    3     15  伊藤   ********   14    4     16  山田   ********   11    8   エージェントテーブル      エージェントID エージェント名       11  JTB         12  HIS         13  KNT         14  HNK         15  KKK   こちらのデータから以下のような検索結果を得たいのですが、 どうすれば宜しいでしょうか? 表示結果                           JTB  HIS  KNT  HNK  KKK      9    7    3    4    0 宜しくお願いします。

  • MySQL
  • 回答数1
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ピボッドテーブルをつかってみるとよいでしょう create table ピボッドテーブル( ピボッドID int,JTB INT,HIS INT, KNT INT ,HNK INT,KKK INT); insert into ピボッドテーブル (id,JTB)values(11,1); insert into ピボッドテーブル (id,HIS)values(12,1); insert into ピボッドテーブル (id,KNT)values(13,1); insert into ピボッドテーブル (id,HNK)values(14,1); insert into ピボッドテーブル (id,KKK)values(15,1); 結果: SELECT SUM(JTB*人数) AS JTB ,SUM(HIS*人数) AS HIS ,SUM(KNT*人数) AS KNT ,SUM(HNK*人数) AS HNK ,SUM(KKK*人数) AS KKK FROM 予約テーブル INNER JOIN ピボッドテーブル ON エージェント = ピボッドID

関連するQ&A

  • MYSQL PERL からの抽出について

    こんにちは。 宜しく御願いたします。 携帯サイトのMYSQLデータベースから抽出を行っておりますが出来ない部分があります。 テーブルにあるそのままのものを抽出する事は出来たのですが、関数と言いますか定義と言いますか、queryを使いテーブルの中にあるものから ~の~の~の合計を取得の様な定義づけが分かりません。 例えば、木村と言う方が田中と言う方を紹介し、田中が佐藤を紹介し、それぞれの紹介人数の合計もさらに抽出といった感じです。 結果 木村は田中を紹介しました 田中は佐藤を紹介しました 佐藤は○○と○○を紹介しました 問題は、木村が田中を紹介した「定義づけ」です。 例えば固体識別より、queryで検索をかけてするのか、メールアドレスにより選別するのかなどで変わると思われます。 一番より方法は御座いませんか?   

  • レコードを移動するには?

    ID 名前 1 佐藤 2 伊藤 3 田中 4 鈴木 テーブルにはこのような情報が入っていて,IDはオートナンバー型で、 ID順にデータを読み込んだりしています。 この時、4レコードの鈴木を1と2レコードの間に切り取り→挿入することはできないのでしょうか? エクセルと違い、アクセスの場合は、右クリック→切り取りをすると、レコードが削除されるようです。 ID 名前 1 佐藤 2 鈴木 3 伊藤 4 田中 このようにしたい場合は、手作業で行うしかないですか?

  • 2つのテーブルで一致しているものを抽出する。SQL文で作成。

    OS:WindowsXP SQLServer2000 <質問> SQL文が浮かばなくて困っています。 どなかたお力を貸していただけないでしょうか。 以下、やりたいことです。 【条件】 1 AテーブルとBテーブルで郵便番号が一致しているものを抽出 2 AテーブルとBテーブルに「番号」列を追加し、初期値を「0」とする 3 1の抽出後、同じ郵便番号がBテーブルに複数あった場合、   2で追加した「番号」列を0→”抽出した行分の数字”にする。 一応、【条件】1の箇所(下記)は浮かんだのですが、 2と3が分かりません。 select Aテーブル.*,Bテーブル.* from Aテーブル,Bテーブル left outer join Aテーブル on Aテーブル.郵便番号 = Bテーブル.郵便番号 WHERE ??? ●Aテーブル ID  | 名前 | 郵便番号  | 番号 ----------------------------------------------------------------- 01 |  小林 | 101-1000 | 0 02 |  鈴木 | 102-1000 | 0 03 | 田中  | 103-1000 | 0 04 | 町田  | 104-1000 | 0 05 | 木村  | 105-1000 | 0 06 | 中田  | 106-1000 | 0 ●Bテーブル ID | 分類  | 郵便番号   | 番号 --------------------------------------------------------------------- 01 | AAA  |  101-5555  | 0 03 | CCC  | 103-1000  | 0 04 | DDD  | 104-1000  | 0 05 | EEE  | 105-1000   |  0 06 | FFF  |  105-1000   | 0 07 | GGG  | 106-1000  | 0 08  | HHH  | 106-1000   | 0 09 | KKK  | 106-1000   | 0 ↓出したい結果↓ ID  | 名前 | 郵便番号   | 分類  | 番号 ------------------------------------------------------------------------------- 03 | 田中 | 103-1000  | CCC   |  0 04 | 町田 | 104-1000  | DDD  |  0 05 | 木村 | 105-1000  | EEE  |  2 05 | 木村 | 105-1000  | FFF  |  2 06 | 中田 | 106-1000  | GGG  |  3 06 | 中田 | 106-1000  | HHH  |  3 06 | 中田 | 106-1000  | KKK  |  3 以上になります。 どうぞよろしくお願い致します。

  • 副問い合わせ

    今はこのようなSQL文を書きたいですが・・ table1 user_id | time 1 | 122120 2 | 100530 table2 user_id | name 1  | 佐藤 2    | 田中 SQL文       結果はこう user_id|name| time 001 |佐藤| 122120 002 |田中| 100530 に出力したいけど、初心者なので、方法が良くわかりません。 ご教授ください。

  • アクセスレポートのNextRecordについて

    アクセス2000を使用しています。 レポートのNexrRecordプロパティの中身が分からないので 教えてください。  以下のテーブルを元にレポートを作成しました。 ****************************** テーブル名:Tテスト ID 名前  (←フィールド名) ------------------------------ 1 田中 2 佐藤 3 鈴木 4 小林 5 大橋 ****************************** レポートの詳細セクションで2件目の フォーマット時、NextRecordをfalse にしましたところ、以下のように出力 されました。 「出力結果」 1 田中 2 佐藤 3 鈴木 4 小林 5 大橋 つまり、テーブルの内容がそのまま出力されました。 素人考えでは、 1 田中 2 佐藤 2 佐藤 3 鈴木 4 小林 5 大橋 なるものとばかり思っておりました。 NextRecordがいつどのように働くのか詳しく教えて いただきたいと思うのですが、どうぞよろしくお願い いたします。 (レポートのセクションの実行順がよくわかりません)

  • Mysqlで複数テーブルの参照

    Mysqlで複数テーブルの参照 お世話になります。Mysqlについて質問させてください。 現在、それぞれnameとdateとflagの3フィールドをもつテーブルが、2つあります。 もともと別の用途で準備したものなのですが、 2つのテーブルのflagを参照して、1のものだけdate順に並べることが出来るでしょうか? ■テーブル1 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  田辺 | 2010-10-01 | 2 -----------------------------  田所 | 2010-11-01 | 2 ----------------------------- ■テーブル2 -----------------------------  name |  date  |flag| -----------------------------  加藤 | 2010-10-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  織田 | 2010-12-01 | 2 -----------------------------  斎藤 | 2010-01-01 | 2 ----------------------------- ■求める結果 -----------------------------  name |  date  |flag| -----------------------------  田中 | 2010-06-01 | 1 -----------------------------  佐藤 | 2010-07-01 | 1 -----------------------------  山田 | 2010-09-01 | 1 -----------------------------  加藤 | 2010-10-01 | 1 ----------------------------- 具体的なSQL文でなくとも構いません。参考になるような情報、サイトをご存じでしたら、教えてください。 よろしくお願いします。

    • ベストアンサー
    • MySQL
  • 副問い合わせの書き方について

    以下のようにテーブルを作成され、データが 格納されています。 CREATE TABLE IDLIST( MAINID number(1), SUBID number(1), FLAG number(1), NAME varchar(10) ); MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤さん 1 3 0 佐藤 2 1 1 田中さん 2 2 0 田中 このデータにおいて、FLAGが1であるNAMEをその他の 同一IDにコピーしたいと考えています。 つまり、期待する実行結果は以下のようになります。 MAINID SUBID FLAG NAME ---------- ---------- -- -------------------- 1 1 1 佐藤様 1 2 0 佐藤様 1 3 0 佐藤様 2 1 1 田中さん 2 2 0 田中さん SQL文を以下のように考えてみましたが、 update IDLIST set NAME = ( select NAME from IDLIST where MAINID = ( select MAINID from IDLIST where FLAG = 1) AND FLG = 1 ); この場合はMAINIDが複数のとき、副問い合わせにて 結果が複数あるため、エラーが発生します。 複数返ってくる結果をどのように処理してあげれば よいか困っています。 是非とも1つのSQLで実現させたいと考えています ので、知恵をお貸し頂きたいと思います。 よろしくお願い致します。

  • SQL:重複を削除した場合の別テーブルの更新

    下記のようなことを行いたいのですが、もう数十時間悩んでおり、このままだとクビになります。 以下のようなテーブルが2つあります ■テーブルA 顧客ID なまえ 内線 ―――――――― 001、 佐藤、 001 ※同じ(これだけ残す) 002、 鈴木、 002 003、 田中、 003  004、 佐藤、 001 ※同じ(削除) 005、 佐藤、 004 006、 鈴木、 005 007、 佐藤、 001 ※同じ(削除) ■テーブルB 伝票ID 顧客ID 購入物 001、 001、 ガム ※対応する顧客は残る 002、 003、 チョコレート 003、 004、 塩  ※対応する顧客が残らない 004、 006、 ガム 005、 002、 塩 006、 007、 塩  ※対応する顧客が残らない テーブルAの佐藤4人中3人は、名前も内線も同じなので 顧客IDは一番小さいものだけ残し、あとは同一とみなし重複行を削除します。 そうするとテーブルBの伝票IDの001、003、006の顧客IDは全部が佐藤だったのですが 重複を削除してしまったため、003と006に対応する顧客がテーブルAから消えてしまいます。 なので、テーブルAの重複を削除するときに、同時にテーブルBの顧客IDも 一緒に一番小さい顧客IDに更新したいのです。 どうか宜しくお願いいたします。

  • 表の取り出し方で困ってます

    以下のような2つのテーブルがあるとして、 [表A:学生マスター] 学生ID 氏名 001   佐藤 002   斉藤 003   田中 [表B:試験結果] 学生ID 試験ID 得点 001   001   80 002   001   70 003   001   60 001   002   75 003   002   85 002   003   90 003   003   85 以下のような集計表を得たいのですが、一発で作成できる(しかも高速な)SQLが思いつきません。 試験結果テーブルに順位が入っていれば簡単なのですが。 どなたかご教示ください。 [集計表] 学生ID 試験1 順位 試験2 順位 試験3 順位 平均得点 001     80   1   75   2   欠席      77.5 002     70   2   欠席      90   1   80.0 003     60   3   85   1   85   2   76.7

  • 何の為に「抽出条件」「または」が2段に分かれてる

    何の為に「抽出条件」「または」が2段に分かれてるのですか? アクセスの使い方がよくわからないので質問します。 ----------------------- テーブル1 苗字(フィールド) 田中 佐藤 伊藤 ・ ・ ・ ----------------------- クエリ1で フィールド:苗字 テーブル:テーブル1 並べ替え: 表示: 抽出条件:"田中" または:"佐藤" ----------------------- と入力して保存しクエリを一回閉じて再度開くと ----------------------- 抽出条件:"田中" Or "佐藤" または:(空白) ----------------------- になってしまいます。 意味は同じだと思うのですが 見た目上、2段のまま保存されたいのですが 自動でorを使われ一段で表示されてしまうのでしょうか? だとしたら何の為に「抽出条件」「または」が2段に分かれてるのですか? わかりやすくするために画像を添付します。