皆さん、はじめまして。
表題の件について、お分かりの方教えて下さい。
まず、テーブルですが
テーブル名: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;
とするとエラーになります(当然)。
このような時って、どうすれば良いのでしょうか?
最近使い始めた素人ですので、宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (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'
の方がスマートかと。

しかしこのテーブル、構造的に余り宜しくないですね(笑
受注番号と受注金額で別テーブルを作成すると言うのも一つの案ですよ。

それでは
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/04 18:44

今ひとつ何をなさりたいのか、判りかねるのですが


こんな SQL は的外れでしょうか?

SELECT custcd,custnum,juchuno, sum(amount)
FROM table1
GROUP BY custcd,custnum,juchuno;
    • good
    • 0
この回答へのお礼

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

お礼日時:2002/02/04 16:38

こんにちは。


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

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

お礼日時:2002/02/04 13:02

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


人気Q&Aランキング