こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLについて

お世話になります。
いろいろ考えたのですが、わかりません。
教えてください。よろしくお願いします。

●現在のSQLは
SELECT 仕入先コード,
支払予定日,
SUM(金額)
FROM 仕入検収テーブル
GROUP BY 仕入先コード,支払予定日

●テーブルの構成は
仕入検収テーブル
 仕入検収番号   (主キー)
 仕入先コード
 支払予定日
 部門番号
 金額

●テーブルデータは
仕入検収番号 仕入先コード 支払予定日 部門番号 金額
1 0001000 2004/06/15 10 3000
2 0001000 2004/06/15 11 7000
3 0002000 2004/06/16 10 20000
4 0001000 2004/06/17 10 1000

上記のようなテーブルの時に
現在は仕入先コードと支払予定日ごとに集約されているのですが、その集約された仕入先コードを用いてその仕入先コードは過去に仕入検収テーブルに登録されていたら備考という項目に「新規」と表示したいのです。

●実現したい実行結果は
支払予定日 仕入先コード 金額 備考
2004/06/15 00010000 10000 新規
2004/06/16 00020000 20000 新規
2004/06/17 00010000 1000

投稿日時 - 2004-06-15 13:50:52

QNo.893039

すぐに回答ほしいです

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

こんなのとか。
※未テストです。

SELECT
T1.支払予定日,
T1.仕入先コード,
SUM(T1.金額) 金額,
DECODE(T1.支払予定日, T2.初回支払予定日, '新規', NULL) 備考
FROM 仕入検収テーブル T1,
(SELECT
MIN(支払予定日) 初回支払予定日,
仕入先コード
FROM 仕入検収テーブル
GROUP BY 仕入先コード) T2
WHERE T1.仕入先コード = T2.仕入先コード
GROUP BY T1支払予定日, T1.仕入先コード

#1の方とはインラインビューの使い方がちょっと違いますね。

投稿日時 - 2004-06-15 14:48:44

お礼

大変参考になりました。
ありがとうございました。

投稿日時 - 2004-06-23 13:42:50

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

確認ですが、"新規"と出すのは最初に登録された年月日にのみに表示するでよろしいのでしょうか?それであれば、
select A.支払予定日, A.仕入先コード, A.金額, decode(A.支払予定日, B.支払予定日, '新規', '') 備考
from(
select 仕入先コード, 支払予定日, sum(金額) 金額
from 仕入検収テーブル A
group by 仕入先コード, 支払予定日
) A
inner join
(select 仕入先コード, min(支払予定日) 支払予定日
from 仕入検収テーブル group by 仕入先コード
) B
on (A.仕入先コード = B.仕入先コード)
でよいと思います。1999構文でないSQLが必要の場合、または私が勘違いしている場合は別途書き込みをお願いいたします。

投稿日時 - 2004-06-15 14:39:04

お礼

大変参考になりました。
ありがとうございました。

投稿日時 - 2004-06-23 13:43:20

あなたにオススメの質問