• ベストアンサー

SQLについて

お世話になります。 まず実現したいことを書きます。 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をセットする) いろいろ考えたのですが、まったくわかりませんでした。 どなたかアドバイスをお願いします。 よろしくお願いします。

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

  • ベストアンサー
  • jmh
  • ベストアンサー率23% (71/304)
回答No.5

decode(dense_rank() over (partition by 案件番号 order by 受注番号), 1, 得意先コード) みたいにするのは、どーですか?

antonio123da
質問者

お礼

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

その他の回答 (4)

  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.4

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

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.3

>やはりストアドを使わなければいけないのでしょうか?(泣) どのようにこのSQLを投げて結果を取得してるのですか? ループかなんかで処理するようなつくりのものでしたら nullのセットは処理を組むのが一番手っ取り早いかと。 わざわざストアド組む必要もないのでは? #SQL*Plusにスクリプト投げて、spoolをファイルに落としてるだけとかいうと無理ですけど。

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

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

antonio123da
質問者

補足

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

  • Senna_FF
  • ベストアンサー率45% (153/334)
回答No.1

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

antonio123da
質問者

補足

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

関連するQ&A