OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
解決
済み

SQL文でのDISTINCT

  • 暇なときにでも
  • 質問No.211384
  • 閲覧数147
  • ありがとう数3
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 100% (4/4)

皆さん、はじめまして。
表題の件について、お分かりの方教えて下さい。
まず、テーブルですが
テーブル名: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
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

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

  • 回答No.3
レベル9

ベストアンサー率 38% (24/62)

こんにちわ

同一の注文番号は必ず同じ金額である

と言うのが揺ぎ無い条件であるのなら、

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

お礼率 100% (4/4)

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

その他の回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 35% (56/160)

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

お礼率 100% (4/4)

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

ベストアンサー率 30% (19/63)

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

SELECT custcd,custnum,juchuno, sum(amount)
FROM table1
GROUP BY custcd,custnum,juchuno;
お礼コメント
yoshibu30

お礼率 100% (4/4)

2ndさん、回答ありがとうございます。
やりたい事を要約しますと、
「同一受注番号に対して、複数存在する枝番レコードは省きたい。
 理由:同一受注番号には、複数の枝番レコードが存在し、各々のレコードに
    その受注での合計金額(当然全て同じ金額)が入っている為」
です。
そういう意味では、質問でのテーブル内容は誤りで、2行目には111111が
入っているという訳です。
これは足さずに、1行目・3行目・4行目のamountの合計を取りたい!
というのがやりたい事です。
その時、group by を使ってしまうと、amount が取れなくなってしまいますよね?
それで悩んでいるのです。
何か良い方法がありましたら、教えて下さい。
投稿日時 - 2002-02-04 16:38:29
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
このQ&Aにこう思った!同じようなことあった!感想や体験を書こう
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ