• ベストアンサー

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

  • Oracle
  • 回答数5
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • SQL文でのDISTINCT

    皆さん、はじめまして。 表題の件について、お分かりの方教えて下さい。 まず、テーブルですが テーブル名:table1 得意先CD 得意先名 受注番号 枝番 受注金額 custcd   custnm  jychuno  edano  amount -------------------------------------------- 000001   AAAAAAA 0000001  01   111111 000001   AAAAAAA 0000001  02   222222 000001   AAAAAAA 0000002  01   333333 000002   BBBBBBB 0000001  01   444444 のような、取引明細テーブルがあったとします。 ご覧頂いてお分かりの通り、得意先CD毎に受注番号が振られていて さらに枝番で管理されています。 (枝番が全て01から始まれば、それだけ選べば良いんですが・・・) この時、同一得意先で受注番号が重複するデータは省きたいのですが どうDISTINCTを入れれば良いのか分かりません。 上記例では、2行目だけを省きたいのです。 SELECT custcd , custnm , DISTINCT juchuno , edano , amount FROM table1 ORDERBY custcd , custnm , jychuno , edano; とするとエラーになります(当然)。 このような時って、どうすれば良いのでしょうか? 最近使い始めた素人ですので、宜しくお願い致します。

  • 集計結果を別テーブルに更新クエリで書き出したい。

    Access2000を使っています。 テーブルとフィールドの関係は次のようになっています。 (一部、Northwind.mdbを使っています。) 受注 ---------------------- 得意先コード 受注コード 受注明細 ---------------------- 受注コード 単価 数量 売上集計 ---------------------- 得意先コード 合計 受注明細テーブルの単価と数量を掛け合わせたものの合計を 売上集計テーブルの合計に書き出したいと思います。 次の選択クエリの合計の値を売上集計テーブルの取引先コード の一致する場所に書き出したいのです。 SELECT 受注.得意先コード, Sum([単価]*[数量]) AS 合計 FROM 受注 INNER JOIN 受注明細 ON 受注.受注コード = 受注明細.受注コード GROUP BY 受注.得意先コード; 売上集計テーブルと受注テーブルの得意先コードは同じものが 存在します。 よろしくお願いします。

  • SQLで追加処理

    sqlで受注日を丁度ここでかかれている and 受注残.受注日 between '2008/08/29' and '2008/09/01' を別々に出したいのですが。 このように分けて追加したいんでですが、思うようにいかない 教えてください  下記のSQLは今作成中のものです。 お願いします 端末番号 受注番号 セット品受注番号 ・・・・・・受注日 受注日1 ----------------------------------------------------------------------------- 1 2312312 NULL 2008/08/29 2008/09/01 1 3423343 NULL 2008/08/29 2008/09/01 1 5435443 NULL 2008/08/29 2008/09/01 1 5435435 NULL 2008/08/29 2008/09/01 1 5435435 NULL 2008/08/29 2008/09/01 1 5453454 NULL 2008/08/29 2008/09/01 insert into 受注月報( 端末番号,受注番号, セット品受注番号,受注伝票区分, 得意先番号,納入先番号,受注日, 最終出荷日,品目番号, 品目名,形式,品目分類,注文番号,製番, 品目区分,売上担当者,出荷予定日, 出荷予定変更前日, 納期,受注数,単価単位, 単位番号,単位名,引当数, 単価,仮単価区分,金額,特記事項1, 特記事項2,出荷数, 完納区分,計画必要数, 計画立案済数,生産計画日, 地区番号,県番号,製造日程有無区分, 照会項目,登録日,更新日,消費税率, 通貨,通貨名,他社品番, 工場番号,引当在庫場所,納入先名, 郵便番号,住所1,住所2, 相手先担当者,電話番号,FAX番号, 輸送LT,図番,運送店, 相手販売店,得意先担当者名, 納入先担当者名,原価, 原価仮単価,営業価格, 営業価格仮単価,取引先略名,担当者番号, 担当者名,区分明細名, 区分明細名1,区分明細名2,取引先略名1,取引先名称) select '1', 受注残.*, 取引先.取引先略名, 担当者.担当者番号, 担当者.担当者名, 区分明細.区分明細名, 区分明細1.区分明細名, 区分明細2.区分明細名, 取引先1.取引先略名 as 取引先略名1, 取引先2.取引先名称 as 取引先名称 from 受注残 LEFT JOIN 取引先 on 受注残.得意先番号 = 取引先.取引先番号 LEFT JOIN 担当者 on 受注残.売上担当者 = 担当者.担当者番号 LEFT JOIN 区分明細 On ( 受注残 .受注伝票区分 = 区分明細.区分明細番号) LEFT JOIN 区分明細 as 区分明細1 On (受注残.仮単価区分 = 区分明細1.区分明細番号) LEFT JOIN 区分明細 as 区分明細2 On (受注残.完納区分 = 区分明細2.区分明細番号) LEFT JOIN 取引先 as 取引先1 on (受注残.得意先番号 = 取引先.取引先番号 ) LEFT JOIN 取引先 as 取引先2 on (受注残.得意先番号 = 取引先.取引先番号 ) where ('00001' = '99999' OR ('00001' <> '99999' AND 受注残.工場番号 = '00001')) and 受注残.受注日 between '2008/08/29' and '2008/09/01' AND (区分明細.区分番号 = '01' Or 区分明細.区分番号 Is Null) AND (区分明細1.区分番号 = '40' Or 区分明細1.区分番号 Is Null) AND (区分明細2.区分番号 = '10' Or 区分明細.区分番号 Is Null) AND 取引先1.取引先番号 = '00001' AND 取引先2.取引先番号 = '00001' AND 取引先.得意先番号 = '12' --出力順 order by 受注残.工場番号, 受注残.得意先番号, 受注残.品目番号, 受注残.受注日, 受注残.受注番号

  • SQLでの集計結果取得について

    以下のようなSQLを書いたのですが,ほしい結果が得られませんでした。 受注に存在しない得意先についても得意先コードと得意先名を得たかったので、 "from 受注 Right Outer Join 得意先 On 受注.得意先コード = 得意先.得意先コード" としたのですが, 受注に存在しない得意先についてはデータが得られませんでした。さらに、Where句で、"受注.得意先コード =* 得意先.得意先コード"と書くとエラーが出てきてしまいました。 どうすれば得意先に存在する得意先すべての集計結果が得られるのでしょうか? String sql = "Select 得意先.得意先コード, Min(得意先.得意先名) " + "As 得意先名, Sum(受注.受注合計金額) " + "from 受注 Inner Join 得意先 " + "On 受注.得意先コード = 得意先.得意先コード " + "where 受注.得意先コード = 得意先.得意先コード " + "and 受注状態区分 = '" + joutaiKubun + "' " +      "and 納入日 between '" + startYMD + "' and '" +        "endYMD + "' " + "Group By 得意先.得意先コード " +      "Order By 得意先.得意先コード ";

    • ベストアンサー
    • Java
  • 条件に応じたSQL文について

    お世話になっております。 以下の場合どのようにSQLを書くかで困っています。 どうかお願いします。 DBはOracle10gです。 テーブルA 区分   integer コード   integer(上記区分が0の場合は得意先のコード、1の場合は商品のコードが登録されています。) 得意先マスタ コード integer 名称 varchar 商品マスタ コード integer 名称 varchar 上記のテーブルAを読んで、 区分が0の場合は得意先マスタの名称 区分が1の場合は商品マスタの名称 をもってきたいのですがやり方がわかりません。 どうかよろしくお願いします。

  • アクセスVBAで

    いつもお世話になっております。 アクセスでCSVからインポートするテーブルで下記のようなフィールドがあります。 受注NO| 枝番| コード 123  | 0  | NULL 123  | 1  | 24 124  | 0  | 25  ・     ・     ・  ・     ・     ・  ・     ・     ・  ・     ・     ・ というようにコードがNULL値の場合同じ受注番号のものからコードを拾い、値を代入をするというVBAを組みたいと思っているのですが、なかなか上手く動きません。 大変お手数ですがどなたかお知恵を拝借できればと思います。

  • SQLで合計表示

    SQLで合計・総合計を出してたいのですが、どうしたらいいのですか? 教えてください 下記はこのような感じでデータベースがあった場合です 得意先:T_得意先.得意先番号 得意先名称:T_取引先.得意先名称 T_受注.工場番号 = T_取引先.取引先番号 T_受注.品目番号 T_受注.品目名 T_区分明細.区分明細名 T_受注.受注番号 T_受注.受注日 T_受注.納期 T_受注.受注数 T_受注.単位名 T_受注.単価  T_受注.仮単価区分  T_受注.金額  T_担当者.担当者名 --番号で名称を結合 品目名 = (T_品目.品目番号 = T_受注.品目番号) 単位名 = (T_単位.単位番号 = T_受注.単位番号) 担当者名 = (T_担当者.担当者番号 = T_受注.担当者番号) -------------------- 得意先合計:得意先ごとの「金額」合計 総合計:全得意先の「金額」合計

  • SQL文を教えて下さい

    VB2008、SQL Server で開発をしています。 下記の条件でデータを取得したいのですが、SQL文がうまくできず、困っています。 おわかりの方、教えてください。 仕様:得意先マスタ(得意先M)の全件と、売上テーブル(売上T)を読みます。     売上テーブルの商品コードの商品名を商品マスタ(商品M)より取得します。     得意先マスタの全得意先を取得する必要があります。     すべての得意先の売上データが存在するわけではありません。 ACCESS上でクエリを作成し、SQLビューにすると、こうなります。 inptSyoCD:画面から入力した商品コード 1,まず、クエリ1: SELECT 売上T.伝票日付, 売上T.伝票番号, 売上T.得意先コード, 売上T.明細区分, 売上T.商品コード, 商品M.商品名称 FROM 売上T LEFT JOIN 商品M 売上T.商品コード = 商品M.商品名 WHERE 売上T.明細区分=1 AND 売上T.商品コード= inptSyoCD ; 2,次に、実際に処理するSQL文: SELECT 得意先M.得意先コード, 得意先M.得意先名称,       クエリ1.伝票日付, クエリ1.伝票番号, クエリ1.明細区分, クエリ1.商品コード, クエリ1.商品名  FROM 得意先M LEFT JOIN クエリ1 ON 得意先M.得意先コード = クエリ1.得意先コード ORDER BY 得意先M.得意先コード,売上T.伝票日付,売上T.商品コード; この2つをひとつのSQL文にする方法がわかりません。 よろしくお願いいたします。

  • SQLについての質問

    9iです。お世話になります。 次のSQLをどう書けばよいのか分かりませんのでご教示願います。 【テーブルA】 id code 1 1 2 2 3 (null) … 【マスタテーブルB】 code name 1   あ 2   い 【ほしい結果】 id name 1  あ 2  い 3 (null) … 要するにcodeがnullの所はnameをnullにして、nullでないところは、マスタから引っ張ってくるということがやりたいです。 宜しくお願いします。

  • 初歩的なSQLですが・・・

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします 今AccessVBAで作業をしているのですが、 Dim ws As DAO.Workspace Dim DB As DAO.Database Dim rs As DAO.Recordset Dim sql As String Set ws = DBEngine.Workspaces(0) Set DB = ws.Databases(0) sql = "select MAX(銀行コード) from 銀行テーブル ;" Set rs = DB.OpenRecordset(sql) Me.合計 = rs このSQL文で銀行テーブルに入っている銀行コードの最大値を取得したいのですが、取得した後どのように記述したら「rs」から値を引っ張り出せるのでしょうか? 宜しくお願いします。