- ベストアンサー
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; とするとエラーになります(当然)。 このような時って、どうすれば良いのでしょうか? 最近使い始めた素人ですので、宜しくお願い致します。
- みんなの回答 (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' の方がスマートかと。 しかしこのテーブル、構造的に余り宜しくないですね(笑 受注番号と受注金額で別テーブルを作成すると言うのも一つの案ですよ。 それでは
その他の回答 (2)
- 2nd
- ベストアンサー率30% (19/63)
今ひとつ何をなさりたいのか、判りかねるのですが こんな SQL は的外れでしょうか? SELECT custcd,custnum,juchuno, sum(amount) FROM table1 GROUP BY custcd,custnum,juchuno;
お礼
2ndさん、回答ありがとうございます。 やりたい事を要約しますと、 「同一受注番号に対して、複数存在する枝番レコードは省きたい。 理由:同一受注番号には、複数の枝番レコードが存在し、各々のレコードに その受注での合計金額(当然全て同じ金額)が入っている為」 です。 そういう意味では、質問でのテーブル内容は誤りで、2行目には111111が 入っているという訳です。 これは足さずに、1行目・3行目・4行目のamountの合計を取りたい! というのがやりたい事です。 その時、group by を使ってしまうと、amount が取れなくなってしまいますよね? それで悩んでいるのです。 何か良い方法がありましたら、教えて下さい。
- misoka
- ベストアンサー率35% (56/160)
こんにちは。 そういう場合は、「グルーピングする」と言います。 ですから、この場合、GROUP BYを使うのが正解のはずです。 ただし、edabanとamountはselectできませんよ。 グルーピングと矛盾しますから。
お礼
misokaさん、早速の回答有難う御座います。 おっしゃる通り、グループ化すると、edabanとamountがselect出来なくなりますよね。 欲しいデータは、amountなんです。 この合計を取りたいんですよ。 副問い合わせを利用してとか、色々考えたんですが、やっぱりsqlだけでは無理があるんですかねぇ? やっぱり、取り込んだデータを再加工する方法で考えるしか無いんでしょうか?
お礼
おぉ~っ、どうせ同一値ならmaxで取れってですか(目から鱗 確かにこれなら、いけるかも!?試してみます。 枝番は、下にも書いた通り01から始まる訳では無いんです。 ったく、うちのテーブル構造に問題があるっちゅーねん、ぶつぶつ・・・(笑 有難う御座いました。 これからもお願いします。