SQLでの計算と値の集約について

このQ&Aのポイント
  • SQLにおいて、複数のデータベースの値を計算して集約する方法について質問があります。
  • 具体的には、2つのデータベースの品目が一致する場合に、計算結果を集計したいと考えています。
  • SQLのコーディングに詳しくないため、助言をいただきたいです。
回答を見る
  • ベストアンサー

SQLでの計算と値の集約について

SQLについて、質問があります。 (質問) 以下のようなDBがあります。 【1のDB】 ID 品目 金額    日付 -------------------------------------------- 1   ミカン   1000    2007/11/1 1   オレンジ  2000    2007/11/1 1   レモン    100    2007/11/1 2   ぶどう   1500    2007/11/1 【2のDB】 区分  品目 金額    日付 ------------------------------------------- a    ミカン   1000    2007/11/1 a    オレンジ   500    2007/11/1 a    レモン    300    2007/11/1 a    ぶどう   1500    2007/11/1 b    ミカン    100    2007/11/1 b    オレンジ   200    2007/11/1 b    レモン    500    2007/11/1 b    ぶどう   2500    2007/11/1 条件。 1のDBの品目=2のDBの品目 やりたい事。 (1)2のDBの金額(区分=a)×1のDBの金額÷2のDBの金額(区分=b) (2)1のDBのIDで、(1)で得た計算結果を集約 上記DBで具体的に言うと、 1のDBのID=1(ミカン、オレンジ、レモン)のそれぞれの計算結果を計算 (ミカン) 1000×1000÷100=10000 (オレンジ) 500×2000÷200=5000 (レモン) 300×100÷500=30 計算結果を集計(ミカン+オレンジ+レモン) 10000+5000+30=15030 上記の作業をできれば、1回のSQLでやりたいと思うのですが、可能でしょうか? 1回のSQLでは不可能な場合、(1)番だけでもやりたいのですが・・・。 SQLのコーディングがよくわかりません。 ご教授をお願いします。

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

  • ベストアンサー
  • tomo316
  • ベストアンサー率35% (51/142)
回答No.2

SELECT 1のDBクエリ クエリ.ID, 1のDBクエリ クエリ.品目, 1のDBクエリ クエリ.式1, 1のDBクエリ集計.式1の合計, 1のDBクエリ クエリ.日付 FROM ( SELECT 1のDBクエリ.ID, 1のDBクエリ.品目, 1のDBクエリ.金額*2のDB_a クエリ.金額/2のDB_b クエリ.金額 AS 式1, 1のDBクエリ.日付 FROM (SELECT 1のDB.ID, 1のDB.品目, 1のDB.金額, 1のDB.日付 FROM 1のDB WHERE 1のDB.ID=1 ) as 1のDBクエリ, (SELECT 2のDB.区分, 2のDB.品目, 2のDB.金額, 2のDB.日付 FROM 2のDB WHERE 2のDB.区分="a" ) as 2のDB_a クエリ, (SELECT 2のDB.区分, 2のDB.品目, 2のDB.金額, 2のDB.日付 FROM 2のDB WHERE 2のDB.区分="b" ) as 2のDB_b クエリ where 1のDBクエリ.品目 = 2のDB_a クエリ.品目 and 2のDB_a クエリ.品目 = 2のDB_b クエリ.品目 ) 1のDBクエリ クエリ, (SELECT Sum(1のDBクエリ クエリ.式1) AS 式1の合計 FROM SELECT 1のDBクエリ.ID, 1のDBクエリ.品目, 1のDBクエリ.金額*2のDB_a クエリ.金額/2のDB_b クエリ.金額 AS 式1, 1のDBクエリ.日付 FROM (SELECT 1のDB.ID, 1のDB.品目, 1のDB.金額, 1のDB.日付 FROM 1のDB WHERE 1のDB.ID=1 ) as 1のDBクエリ, (SELECT 2のDB.区分, 2のDB.品目, 2のDB.金額, 2のDB.日付 FROM 2のDB WHERE 2のDB.区分="a" ) as 2のDB_a クエリ, (SELECT 2のDB.区分, 2のDB.品目, 2のDB.金額, 2のDB.日付 FROM 2のDB WHERE 2のDB.区分="b" ) as 2のDB_b クエリ where 1のDBクエリ.品目 = 2のDB_a クエリ.品目 and 2のDB_a クエリ.品目 = 2のDB_b クエリ.品目 ) as 1のDBクエリ集計;

pen-ko
質問者

お礼

ご回答、ありがとうございました。 早速、このコーディングで試してみたいと思います。

その他の回答 (1)

回答No.1

RDBMSは、SQL Serverでいいのでしょうか? 2000ですか2005ですか? 具体的に、どの部分が分からないのでしょうか?

pen-ko
質問者

補足

>RDBMSは、SQL Serverでいいのでしょうか? はい、SQL Server2003です。 MicrosoftQueryを使用しています。 SQLでの集約部分はわかるのですが、乗算、除算の部分のコーディングがわかりません。 普通に*,/を使ってコーディングしてもSQLエラーになってしまいます。 乗算、除算の部分のコーディングを教えていただけたらと思います。

関連するQ&A

  • SQLのsum関数

    こんにちは。 PostgresのSQLが思うように動いてくれません!! そのIDを持っている人がどのくらいの数を持っているのかを抽出したいのです。 テーブルは下記です。 ********************************************* ★Aテーブル ID  名前  数  場所  日付 0001 みかん 1  冷蔵庫 0901 0001 みかん 4  倉庫  0901 0001 みかん 1  冷蔵庫 0901 0002 いちご 1  部屋  0901 0002 いちご 2  部屋  0801 0003 きのこ 6  倉庫  0901 ★Bテーブル ID  名前 0001 みかん 0002 いちご 0003 きのこ 0004 あいす ********************************************* となっている場合、下記SQLを実行すると select a.ID ,b.名前 ,sum(a.数) as 数 from Aテーブル a,Bテーブル b where a.日付 >= '0901' and a.日付 <= '0901' and a.ID = b.ID group by a.ID ,b.名前, a.数 結果が 0001 みかん 2 0001 みかん 4 0002 いちご 1 0002 いちご 2 となり0001は合計6で出て欲しいのに別々に出てしまいます。 理想では 0001 みかん 6 0002 いちご 3 で出て欲しいです。 たとえばこの場合、場所によってなど出てしまうものでしょうか? これはなぜなのでしょうか? よろしくお願いします。

  • 二つの表の項目を比較して値を取得するSQL

    お世話になります、 二つの表の項目を比較して値を取得するSQLを作成しているのですが、うまくいきません。 具体的には Aテーブル NAME | PRICE ------|------ リンゴ | 100 ------|------ オレンジ | 200 ------|------ ブドウ | 300 ------|------ Bテーブル NAME | PRICE ------|------ リンゴ | 1000 ------|------ オレンジ | 200 ------|------ ブドウ | 1300 ------|------ という二つのテーブルA、Bがあったとします。 このA,Bの二つのテーブルのそれぞれの果物のPRAICEを比較してBのPRICEがアップしている果物を出力するという SQLを教えてください。 <ほしい結果> NAME | PRICE ------|------ リンゴ | 1000 ------|------ ブドウ | 1300 よろしくお願いします。

  • SQLでの計算結果がおかしい

    SQLで調和平均(もどき)を計算したいのですが、下のようなSQL文で計算した結果が正しく出ないのです。 select ID, 3 / ((1 / (A1 + 1) + 1 / (B1 + 1)) + 1 / (C1 + 1)) as HARMEAN from TABLE (各項に1を足しているのは、ゼロ除算を避けるための苦肉の策です) たとえば、A1=20, B1=10, C1=50 の場合、上記の結果が27.14と出ます。 (正しい計算結果は18.97のはずです) ちなみに、上とまったく同じ式をExcelに入れて計算させると、ちゃんと正しい結果が出ます。 何が原因なのでしょうか?

  • SQLの作成について

    SQLの作成について 以下のようなDBがあるとします。 ---------------------- DB1(マスタ)  区分   フラグ  名称   A    1    男   A    2    女   B    1    車   B    2    飛行機   B    3    電車   C    1    コンビニ   C    2    スーパー   C    3    百貨店   D    1    デスクトップ   D    2    ノート ---------------------- ----------------------- DB2  区分1 フラグ1 名称1 ・・・ 区分4 フラグ4 名称4   A   2           D    1 ----------------------- DB2の区分とフラグから、DB1を参照して 取ってきたDB1の名称をDB2に書き込みたいです。 名称の1つ毎に、SQLを発行し、それぞれ名称を取得するなら where DB1.区分=DB2.区分 and DB1.フラグ = DB2.フラグ みたいな感じでそのまま出来ると思いますが、 今は、1つのSQLでDB2の複数の名称を一気に取得したいと考えてます。 どのようなSQLが良いのでしょうか

  • mysqlのSQL文の書き方について

    mysqlでA,Bのテーブルがあるとします。 A ID1 りんご ID3 みかん ID4 ぶどう B ID2 メロン ID3 みかん ID4 ぶどう この二枚のテーブルでどちらかのテーブルに存在すればヒットする ようなselec文はどう書いたらいいのでしょうか。重複する行は、 一行のみ抜き出したいです。 こういうかんじにです。 ID1 りんご ID2 メロン ID3 みかん ID4 ぶどう よろしくお願いします。

  • SQLに関して

    環境:Oracle 11g SQLで階層問い合わせに関して教えて下さい。 今、ある部品テーブルに対し、直下のレコードのみを抽出しようとしていますが、ある共通の 構成をA部品群、B部品群の中に入れた場合、なぜか同じ結果が2回表示されてしまいます。 以下にサンプルのデータとSQLを作成しましたので、何がおかしいか教えて頂きたいと思います。 【Aテーブル】 品目番号,親品目番号 A A1,A B,A B1,B ↑ A部品群 C D,C B,C B1,B ↑ B部品群  ※ Bが共通の構成です。 【SQL】 select 品目番号 as 下位品目番号,親品目番号 from A_TABLE where 品目番号 != 'B' AND 親品目番号 = 'B' start with 品目番号 = 'B' connect by prior 品目番号 = 親品目番号 【結果】 下位品目番号,親品目番号 B1,B B1,B 2回表示されてしまいます。 単純に親品目番号=’B’としてしまえば正しく拾えますが、上記のSQLを多様している為、 何が間違っているか教えて頂ければと思います。 初歩的な質問で申し訳ありませんが、教えて下さい。

  • SQL文で表すには

    以下の表を用いてSQL文を作成しようと思ってるんですが、途中までしか思いつかないので、どなたかご教授のほうよろしくお願いします。 shohin shiire 商品番号 商品名 単価   仕入番号 仕入先名  0001 みかん 100     001  A 0002 りんご 200     002 B 0003 ぶどう 300     003   C tran 購入番号 商品番号 仕入番号 数量 1 0001 001 1 2 0001 002 2 3 0001 003 3 4 0001 001 4 5 0001 002 5 6 0002 003 6 7 0002 001 7 8 0002 002 8 9 0003 003 9 10 0003 001 10 11 null 0004 20 これを以下のように出力するためにはどのようなSQL文を書けばよいですか? 商品番号 商品名 仕入番号 仕入先名 数量 単価 金額  0001 みかん 001    A   5 100 500  0001 みかん 002    B   7 100 700  0001 みかん 003    C   3 100 300  0002 りんご 001    A   7 200 1400  0002 りんご 002    B   8 200 1600  0002 りんご 003    C   6 200 1200  0003 ぶどう 001    A   10 300 3000  0003 ぶどう 003    B   9 300 2700  0004 null 004   null   20 null null ここまでは正しいと思うのですが・・・ select shohin.商品番号, shohin.商品名, shiire.仕入番号,     tran.数量, shohin.単価, tran.数量 * shohin.単価 as 金額 よろしくお願いします。

  • 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 どのように変更を加えれば、上記の「抽出結果」にできるのでしょうか? よろしくお願いいたします。

  • エクセルの計算式でできますか?

    エクセル2003を使用してます。 計算式の組み方が分からないので、下記のようなことを実現できる式があれば教えてください。 シート1(商品の基本台帳)   A(記号)  B(商品)    C(元の個数)  D(在庫数) 1 A      リンゴ      100       57 2 B     オレンジ      166      106 3 C      レモン      70        8 シート2(売上げ台帳)   A(日付)  B(記号)   C(商品)   D(販売数) 1 4/7       B     オレンジ   58 2 4/7       C     レモン    15 3 4 5 4/28      A     リンゴ     38 6 4/28      C     レモン     35 7 4/28      B     オレンジ    2 8 9 10 5/3      C    レモン      12 11 5/3      A    リンゴ       5 ・・・・・ ROUNDでシート1の記号を、シート2に打ち込むと商品名が出てくるようになってます。 さらにシート2の販売数をその記号から勝手に計算してもとの個数から引いていき、シート1の在庫数に表示させたいのですが、そんなことができる計算式はありますか?  

  • SQL文で

    SQL2000serverで 異なる2つのデーターベースの中にある 別のテーブルの情報を SQL文を使って、抽出する事は出来るのでしょうか? たとえば下記のように「DB-A」「DB-B」と言った 二つのDBの中のそれぞれのテーブルのIDフィールドで リレーションを取ってDB-AのTablA1のFldAの 値(AA)からDB-BのTablB1のFldBの値(あ)を 抽出することはSQL文で可能なのでしょうか? DB-A DB-B TablA1 TableB1 ID FldA ID FldB 1 AA 1 あ 2 BB       2 い 3 CC 3 う 4 DD 4 え