人に聞けない痔の悩み、これでスッキリ >>

(顧客テーブル)
項目名 顧客コード、顧客名、顧客名カナ
(商品テーブル)
項目名 商品コード、商品名、受注単価
(受注テーブル)
項目名 受注番号、顧客コード、受注年月日、納入予定年月日
(受注明細テーブル)
項目名 受注番号、商品コード、受注数量

を使って次のビューを作ります。
(商品別受注日計データ)
項目名 
商品コード
商品名
受注単価
受注年月日
日計商品別受注数量  受注数量(受注明細テーブル)の合計
日計商品別受注金額  受注単価*日計商品別受注数量

このときに日計商品別受注金額を求めるには先に日計商品別受注数量を求めておかなければなりませんが、これを一つのSELECT文で行う事は可能でしょうか。
そのまま一つのSELECT文でやろうとするとGROUP BYでうまくいかないのですが、
やはり先に日計商品別受注数量を求めておかなければいけないのですか?
どっちにしろやり方がわかりません。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

こんにちわ。



ちょっとやってみました。
ビューにはしていませんが、これでどうでしょう?

-- 商品テーブル
Create table item_table (
item_code number(4),
item_name varchar2(16),
item_price number(6),
primary key (item_code)
);

Insert into item_table (item_code, item_name, item_price) values (1, 'Note', 100);
Insert into item_table (item_code, item_name, item_price) values (2, 'Pen', 50);
Insert into item_table (item_code, item_name, item_price) values (3, 'Book Stand', 500);

--受注テーブル
Create table order_table (
order_no number(4),
customer_no number(4),
order_date date,
delivery_date date,
primary key (order_no)
);
Insert into order_table (order_no, customer_no, order_date, delivery_date) values
(1, 1, trunc(sysdate), trunc(sysdate+2));
Insert into order_table (order_no, customer_no, order_date, delivery_date) values
(2, 2, trunc(sysdate), trunc(sysdate+3));
Insert into order_table (order_no, customer_no, order_date, delivery_date) values
(3, 1, trunc(sysdate+1), trunc(sysdate+2));

--受注明細
Create table order_detail (
order_no number(4),
item_code number(4),
order_num number(4)
);

Insert into order_detail (order_no, item_code, order_num) values (1, 1, 10);
Insert into order_detail (order_no, item_code, order_num) values (1, 2, 5);
Insert into order_detail (order_no, item_code, order_num) values (1, 3, 3);

Insert into order_detail (order_no, item_code, order_num) values (2, 1, 15);
Insert into order_detail (order_no, item_code, order_num) values (2, 3, 8);

Insert into order_detail (order_no, item_code, order_num) values (3, 1, 20);
Insert into order_detail (order_no, item_code, order_num) values (3, 3, 4);
commit;

Select i.item_code 商品コード, i.item_name 商品名, i.item_price 受注単価,
o.order_date 受注年月日, sum(od.order_num) 日計数量,
sum(od.order_num) * i.item_price 日計金額
from item_table i, order_table o, order_detail od
where i.item_code = od.item_code and
o.order_no = od.order_no
group by i.item_code, i.item_name, i.item_price, o.order_date;

商品コード 商品名 受注単価 受注年月 日計数量 日計金額
---------- ---------------- ---------- -------- ---------- ----------
1 Note 100 02-11-04 25 2500
1 Note 100 02-11-05 20 2000
2 Pen 50 02-11-04 5 250
3 Book Stand 500 02-11-04 11 5500
3 Book Stand 500 02-11-05 4 2000
    • good
    • 0
この回答へのお礼

ご丁寧にありがとうございます。
副問合せを使って先に日計数量を求めて仮想表を作ってやらなければいけないのかと色々考えていたのですがSUM関数でそのままかけることもやっぱりできるんですね。色々試したのですがGROUP BYでエラーがかかってしまって。

これを参考にさせていただいてビューを作成したいと思います。
ありがとうございました。

その他の書き込みして下さったみなさまもありがとうございました。

お礼日時:2002/11/04 18:32

#1の者です。


サブクエリーという言い方はaccessだったかも(笑)。
確か「副問い合わせ」って言います。
一度調べて下さい。
    • good
    • 0

MS-ACCESSで作ってみました。



クエリ1(第一段階)

SELECT 受注テーブル.受注年月日, 受注明細テーブル.商品コード, Sum(受注明細テーブル.受注数量) AS 受注数量の合計
FROM 受注テーブル INNER JOIN 受注明細テーブル ON 受注テーブル.受注番号 = 受注明細テーブル.受注番号
GROUP BY 受注テーブル.受注年月日, 受注明細テーブル.商品コード;

クエリ2(第二段階)

SELECT クエリ1.商品コード, 商品テーブル.商品名, 商品テーブル.受注単価, クエリ1.受注年月日, クエリ1.受注数量の合計, [商品テーブル]![受注単価]*[クエリ1]![受注数量の合計] AS 式1
FROM クエリ1 INNER JOIN 商品テーブル ON クエリ1.商品コード = 商品テーブル.商品コード;

問いのDBは、正規化する必要があります。項目名など

MS-ACCESSが使えれば、Webにのせましょうか?
    • good
    • 0

こんばんわ。


サブクエリーを使えばできると思います。
ビューの中に顧客テーブルの情報が無いのであえて使用しません。
select s.商品コード as 商品コード,
s.商品名 as 商品名,
s.受注単価 as 受注単価,
jj.受注年月日 as 受注年月日,
jj.受注数量合計 as 日計商品別受注数量,
(jj.受注数量合計 * s.受注単価) as 日計商品別受注金額
from
商品テーブル s,
(select jm.商品コード,
    j.受注年月日,
    sum(受注数量) as 受注数量合計
from 受注テーブル j,
   受注明細テーブル jm
where j.受注番号 = jm.受注番号
group by jm.商品コード,
    j.受注年月日) jj
where s.商品コード = jj.商品コード;

私は独学でSQLを覚えたので、これが一番正しい方法かはわかりませんが
これで結果はでてくると思います。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


人気Q&Aランキング