【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】

Branch(branchNo, street, city, postcode)と
PropertyForRent(propertyNo, street, city, postcode, type, rooms, rent, ownerNo, staffNo, branchNo)というデータベースがあります。
OracleでbranchNoをキーにして各ブランチごとの現在の貸家の金額(rent)を集計、そして最後に全部のブランチの合計金額を集計したいのです。
すべてのブランチを表示させたい(今貸している部屋のないブランチも含め)のですが、私が作ったものだと、現在貸している部屋のあるブランチしか表示されません。また、全体の合計金額もどうやって出せばいいのか悩んでいます。sumを使うのでしょうが、各々のブランチの合計でsumを使ってしまうと、全体の合計が出せなくなってしまうのです。。これは、ただ単に私のOracle使用暦が浅いためにわからないのか、根本的な作り方が悪いのかわかりません。

お手数おかけしますが、ご回答よろしくお願いします。

A 回答 (2件)

E-R図が無いので、お答えしにくいのですが。



まずは、テーブルが正規化されてないと思います。
street, city, postcodeという項目が、BranchとPropertyForRentの両方にあります。
もし、上記の3つの項目がbranchNoで一意に決まるのなら、PropertyForRentには当該項目がいりません。
その他にもPropertyForRentから、Branchに移した方がよい項目がありそうな気がします。(このままでは、第1正規化の状態です)

テーブルは他の人が定義したもので、変更できないとして、BranchとPropertyForRentがranchNoで結び付けられ、1対多の関係にあると仮定すると、「すべてのブランチを表示させたい」場合は、以下の様になると思います。
(時間が無いので、実際には確認していませんので一寸自信がありませんが)

SELECT A.branchNo,
A.street,
A.city,
A.postcode,
SUM(B.rent)
FROM Branch A,
PropertyForRent B
WHERE A.branchNo = B.branchNo(+)
GROUP BY A.branchNo,
A.street,
A.city,
A.postcode

また、全ての合計は
SELECT SUM(rent)
FROM PropertyForRent
で表示可能です

この回答への補足

うまく動かすことができました。が、すべての合計は、全部を表示させた後(一番最後の列)に表示させたいのです。
縦の列に加えることはできるのですが、最後にそれをプラスさせるにはどうしたらいいのでしょうか

補足日時:2005/02/09 21:29
    • good
    • 0
この回答へのお礼

テーブルはその二つだけではなくて、他にももっとあるので、それを見ていただければもっとよくわかっていただけたのでしょうが・・・すみません。
いずれにせよ、私がテーブルをいじることはできないので、早速教えてくださったとおりに試してみようと思います。ありがとうございます。

お礼日時:2005/02/09 12:06

こんにちは。



全体像がわからないのと、Oracleのバージョンがわからないので、ちょっと???なんですが・・・、
PARTITIONとかCUBEを使えばいいのでは?
集計関数(構文)はSUMだけじゃないですよ。
(^^ゞ
    • good
    • 0
この回答へのお礼

テーブルがたくさんあったため、要点だけ省いて説明してしまいました。また、Oracleは、9iを使っていました。説明不足ですみません・・・。
Oracleはまだ初めて1ヶ月で、実は今回が初めて実際に動かしてみる段階なのです。もっと本を読み込まないとだめだなと思いました。集計関数についてもっと調べてみます。ありがとうございました。

お礼日時:2005/02/09 12:58

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

関連するカテゴリからQ&Aを探す


おすすめ情報