アプリ版:「スタンプのみでお礼する」機能のリリースについて

Oracle初心者です。お願いいたします。
Oracle8iに、VB6で接続するアプリですが、

番号 列名  ID  概要     金額
0001 品川  10  駅が広い   10000
0002 渋谷  10  繁華街    15000
0003 川崎  12  新開発地   30000
0004 池袋  13  旧市街    18000
0005 神田  12  本屋街    40000
0006 上野  10  食品街     500

ひとつのSQL文で、上記のような表の、同一のID列ごとにまとまった、金額の合計を求めるのですが、番号・列名・概要は、その“番号”のもっとも大きな番号の値を表示したいのです。ACCESSであれば、列に“First”を使用すればできるのですが、Oracle8iだと、わかりません。

欲しい表示は、

番号 列名  ID  概要     金額
0006 上野  10  食品街    25500
0005 神田  12  本屋街    70000
0004 池袋  13  旧市街    18000

同様なSQLが他にもあり、最終的に、3~6個のSQLを、
Unionで一本化するのですが、元になるSQLがつくれません。
どなたか、よろしくお願いいたします。

by mictic

A 回答 (3件)

誰かもっとすっきりしたものを考えてくれ



select 最大番号, 列名, ID, 概要, 合計金額
from 表,
(select ID, sum(金額) as 合計金額 from 表 group by ID) A,
(select ID, max(番号) as 最大番号 from 表 group by ID) B
where
表.ID=A.ID and
表.ID=B.ID and
表.番号=B.最大番号;
    • good
    • 0

#2さんと同じですが、8iではエイリアスのASは効かなかったと思われ。


もし、エラーになったらこちらで。

select a.番号,a.列名,a.ID,a.概要,b.金額
from テーブル a,
(select ID,sum(金額) "金額",max(番号) "番号"
from テーブル
group by ID) b
where a.番号 = b.番号
order by a.ID
    • good
    • 0

「番号」は主キーでしょうか?


Oracleが手元に有りませんので確認できませんが、「番号」が主キー、または、NULL無しのユニークな値だと仮定して、下記の様なクエリではどうでしょうか。

SELECT
a.番号,
a.列名
a.ID
a.概要
b.合計金額
FROM
元の表 AS a,
(SELECT MAX(番号) AS 番号, SUM(金額) AS 合計金額 FROM 元の表 GROUP BY ID) AS b
WHERE a.番号 = b.番号
ORDER BY a.ID
    • good
    • 0

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