プロが教えるわが家の防犯対策術!

お世話になります。

まず実現したいことを書きます。

DBテーブル内容
受注テーブル
受注番号 案件番号 得意先コード
1      1      0001
2      1      0001
3      1      0001
4      2      0002
5      2      0002
6      3      0003
7      4      0001
8      5      0003

のようにデータが入っている時に
受注番号 案件番号 得意先コード
1      1     0001
2      1     null
3      1     null
4      2     0002
5      2     null
6      3     0003
7      4     0001
8      5     0003

このように取得したいのですが、
(案件番号と得意先コードが一致している時は一番上に
だけ得意先コードを表示それ以外はnullをセットする)

いろいろ考えたのですが、まったくわかりませんでした。
どなたかアドバイスをお願いします。
よろしくお願いします。

A 回答 (5件)

decode(dense_rank() over (partition by 案件番号 order by 受注番号), 1, 得意先コード)


みたいにするのは、どーですか?
    • good
    • 0
この回答へのお礼

返信ありがとうございました。

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

お礼日時:2004/06/29 11:59

こんにちわ。



SQL*Plus から実行するのであれば、Break 文が使えると思います。
Select する前に、「Break on 得意先コード」として見て下さい。
得意先コードの値が直前のレコードと同じ場合には、値を出力しません。
詳細は、SQL*Plus のユーザーズガイドで確認して下さい。
    • good
    • 0

>やはりストアドを使わなければいけないのでしょうか?(泣)



どのようにこのSQLを投げて結果を取得してるのですか?
ループかなんかで処理するようなつくりのものでしたら
nullのセットは処理を組むのが一番手っ取り早いかと。

わざわざストアド組む必要もないのでは?

#SQL*Plusにスクリプト投げて、spoolをファイルに落としてるだけとかいうと無理ですけど。
    • good
    • 0

こんなのとか



select
T1.受注番号,
T1.案件番号,
decode(T1.受注番号, T2.受注番号, T1.得意先コード)
from 受注テーブル T1,
(select
min(受注番号) 受注番号,
案件番号,
得意先コード
from 受注テーブル group by 案件番号, 得意先コード
) T2
where
T1.案件番号 = T2.案件番号
and
T1.得意先コード = T2.得意先コード

この回答への補足

返信ありがとうございます。

例としてあげさせてもらったことは実現できたので
本来やろうとしていたことをやってみたところ。
例では一つのテーブルでしたが、実際には7つのテーブルが絡み合う複雑な副問い合わせの山になってしまいレスポンスが非常に悪くなってしまいました。
やはりストアドを使わなければいけないのでしょうか?(泣)
ストアドはほとんど組んだことがないので基本的なことからわかるサイトをどなたかご存知内でしょうか?

補足日時:2004/06/23 17:47
    • good
    • 0

使用用途やインターフェイスは?


ただ表示したいだけですか?
ストアドでキーブレイク処理を行うってのは
駄目なんでしょうか?

この回答への補足

返信ありがとうございます。

できればストアドは使いたくありません。
使用用途はリストを取得して表示させるだけです。

補足日時:2004/06/23 14:26
    • good
    • 0

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