• ベストアンサー

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; とするとエラーになります(当然)。 このような時って、どうすれば良いのでしょうか? 最近使い始めた素人ですので、宜しくお願い致します。

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

  • ベストアンサー
  • sueoka
  • ベストアンサー率38% (24/62)
回答No.3

こんにちわ 同一の注文番号は必ず同じ金額である と言うのが揺ぎ無い条件であるのなら、 2ndさんのSQLをちょっと改造して、 SELECT custcd, suctnum, juchuno, max(amount) FROM table1 GROUP BY custcd, custnum, juchuno; で出来ますよ(もちろん、minでもOK)。ただし、お勧めはしません。 その理由は、「他の人がこのSQLを見たときに、何をやりたいのかが分からなくなる」 からです。 又は、「枝番」は必ず01から始まると言うことであれば、 SELECT custcd, custnum, juchuno, amount FROM table1 WHERE edano = '01' の方がスマートかと。 しかしこのテーブル、構造的に余り宜しくないですね(笑 受注番号と受注金額で別テーブルを作成すると言うのも一つの案ですよ。 それでは

yoshibu30
質問者

お礼

おぉ~っ、どうせ同一値ならmaxで取れってですか(目から鱗 確かにこれなら、いけるかも!?試してみます。 枝番は、下にも書いた通り01から始まる訳では無いんです。 ったく、うちのテーブル構造に問題があるっちゅーねん、ぶつぶつ・・・(笑 有難う御座いました。 これからもお願いします。

その他の回答 (2)

  • 2nd
  • ベストアンサー率30% (19/63)
回答No.2

今ひとつ何をなさりたいのか、判りかねるのですが こんな SQL は的外れでしょうか? SELECT custcd,custnum,juchuno, sum(amount) FROM table1 GROUP BY custcd,custnum,juchuno;

yoshibu30
質問者

お礼

2ndさん、回答ありがとうございます。 やりたい事を要約しますと、 「同一受注番号に対して、複数存在する枝番レコードは省きたい。  理由:同一受注番号には、複数の枝番レコードが存在し、各々のレコードに     その受注での合計金額(当然全て同じ金額)が入っている為」 です。 そういう意味では、質問でのテーブル内容は誤りで、2行目には111111が 入っているという訳です。 これは足さずに、1行目・3行目・4行目のamountの合計を取りたい! というのがやりたい事です。 その時、group by を使ってしまうと、amount が取れなくなってしまいますよね? それで悩んでいるのです。 何か良い方法がありましたら、教えて下さい。

  • misoka
  • ベストアンサー率35% (56/160)
回答No.1

こんにちは。 そういう場合は、「グルーピングする」と言います。 ですから、この場合、GROUP BYを使うのが正解のはずです。 ただし、edabanとamountはselectできませんよ。 グルーピングと矛盾しますから。

yoshibu30
質問者

お礼

misokaさん、早速の回答有難う御座います。 おっしゃる通り、グループ化すると、edabanとamountがselect出来なくなりますよね。 欲しいデータは、amountなんです。 この合計を取りたいんですよ。 副問い合わせを利用してとか、色々考えたんですが、やっぱりsqlだけでは無理があるんですかねぇ? やっぱり、取り込んだデータを再加工する方法で考えるしか無いんでしょうか?