皆さん、はじめまして。
表題の件について、お分かりの方教えて下さい。
まず、テーブルですが
テーブル名: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を探す

このQ&Aと関連する良く見られている質問

QAccessで自前の自動採番処理で採番テーブルを

Accessで自前の自動採番処理で採番テーブルを作り、その採番テーブルに格納してある最後の主キーのNO.を取得して、それに1加算したものを、新規レコードの主キーの自動採番処理結果として設定するやり方を考えていますが、その場合に

1) 複数レコードにエクセルなどから複数行データをコピーして貼り付けた場合には、採番がうまくいくのでしょうか?行かない場合には、その対処策はありますでしょうか。

2) 一行、または、複数行を削除した場合には、採番は既に登録済みの最後のNo.から自動採番するようになると思いますが、通常のアクセスのシステムでは、このような挙動で宜しいのでしょうか?

ご回答のほうよろしくお願いします。

Aベストアンサー

#1 の回答は番号フィールドにNull がある複数のレコードが存在する場合の
サンプルです。
※最後に採番テーブルの番号の値を変更するのが抜けてました。
rs.close:set rs =nothing の前に
currentdb.execute("update 採番テーブル set 番号 =" & maxnum)
を追加してください。

1レコードずつ手入力で行っている場合はまた別の話になります。
フォームのレコード移動時イベントに
if me.newrecord then
me!フォームの番号コントロール名 = Nz(DMax("番号", "採番テーブル"), 0) +1
・・・とかになりますが
採番テーブルの方の番号を更新するタイミングは更新前処理に行えば
良いでしょう。

が、もしかしてマルチユーザー環境で・・・と考えているのなら
全部忘れてください。ハードルがぐっと上がりますので確かな回答は出来ません。
こちらが参考になるかと思いますけど。。。
[VB] DAO でユーザー定義カウンターを実装する方法
http://support2.microsoft.com/default.aspx?scid=kb;ja;191253

私からは以上です。

#1 の回答は番号フィールドにNull がある複数のレコードが存在する場合の
サンプルです。
※最後に採番テーブルの番号の値を変更するのが抜けてました。
rs.close:set rs =nothing の前に
currentdb.execute("update 採番テーブル set 番号 =" & maxnum)
を追加してください。

1レコードずつ手入力で行っている場合はまた別の話になります。
フォームのレコード移動時イベントに
if me.newrecord then
me!フォームの番号コントロール名 = Nz(DMax("番号", "採番テーブル"), 0) +1
・・・とかになりますが
採番テ...続きを読む

QVSAM,QSAM,BSAM,BPAM,BDAM

データセット編成とアクセス法に関してですが、それぞれ、どのようなデータセットとして使われることが多いですか?データを入れるとか…、プログラムを入れるとか…。

Aベストアンサー

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAMはVSAMアクセスの動作方式のことで
す(プログラム中では意識する必要ありません)。

> BDAMはディスクか???
これもアクセス方式ですね。目的レコードの相対アドレ
スを指定してアクセス(READ/WRITE)する方式です。

> DBやJCL、ファイルを入れる場合はBPAMか?
DBは別物です。JCL、プログラム等が格納されるファイル
の形式(編成)がBPAMです。

> ボリュームという言葉があるけれど、データ編成で考えてはいけないのか?
ボリュームとは例えば磁気テープ1本、磁気ディスク1
スピンドルといった補助記録媒体の単位です。
→ 磁気ディスクには1ボリューム中に複数の異なる
  データ編成のファイルを作成可能です。

> ボリュームはどのようにできているのか?
VTOCおよびデータ領域です。

> ボリュームより大きいものはなんと言うのか?
通常ボリュームグループという概念があります。
→ この概念が無いとマルチボリュームファイルは作成
  できませんから・・・。

> 機能は、ちゃんと読んでみます。データ編成は他にもありそうな…。
NECの場合だと、相対編成、乱編成、待機結合編成なんて
のもありますね。

> ファイル編成とデータセット編成は同じことだよな…。???
大体において同じ意味で使用しているケースが多いです。

私の会社ではまだメインフレーム現役です・・・。

メインフレームの世界ですね。私が使い慣れているのは
NEC製ですが、共通項が多いので説明します。

> BPAMがプログラムライブラリーか?
簡単にはその通りです。
プログラムだけではないですが、順編成のサブファイル
を複数格納可能な編成方式のファイル(ライブラリ)を
意味します。

> VSAMがDB?QSAM,BSAMがテープとディスクか?
VSAMはDBの原型みたいなものです。
カタログ/VSAMファイル本体以外にジャーナルを持ち、
COMMIT,ROLLBACK制御も可能です。
QSAM,BSAM...続きを読む

Qoracle9i distinct

select distinct 1 as aaa, bbb
from table_a

aaa     bbb
--------------------------
1      a
1      b
1      c

この場合の「distinct 1」というのは
table_aの1列目でdistinctするという
意味でいいのでしょうか?
でもdistinct 2
とすると、aaaの列の値が2になるだけなのですが・・。
すみませんがdistinct 1 の意味を教えていただけますでしょうか。

Aベストアンサー

>この場合の「distinct 1」というのは
>table_aの1列目でdistinctするという
>意味でいいのでしょうか?

>すみませんがdistinct 1 の意味を教えていただけますでしょうか。

distinct 1 に意味はありません。
1 as aaa
の方です。

selectして取り出す結果は、テーブル中の値や、それを加工したものでなくてもかまいません。
今回の場合では、"1"という固定の値を、1列目に出力してというSQLになります。
as aaaは、その列の名前をaaaにしてという意味です。

そのため、2に変えればaaaが2になります。

distinctの意味は分かりますか?

Qアクセス メインフォームの伝票番号(DMax関数で連番)が11番以上自動連番されない。

こんばんは。どうしてなのか、原因がみつけられません。
解決方法をご教示いただけないでしょうか?よろしくお願いいたします。

事象:メインフォームの伝票番号が11番以上は自動連番されない。
(伝票番号10までは、新規追加すれば発番できていたのに、11以降、手入力で対応中。)

仕様:
table:伝票テーブル(伝票番号フィールドはテキスト型)
明細テーブル(明細番号フィールドはオートナンバー型)
※明細テーブルに伝票番号フィールドがあって、伝票テーブルの伝票番号フィールドとリレーションシップがかかっています。
Query:伝票クエリ
明細クエリ
Form:伝票フォーム
(伝票番号のプロパティ\データ\規定値に、=Nz(DMax("[伝票番号]","伝票テーブル")+1,1)と設定)
   明細フォーム

伝票フォームに、明細フォームをサブフォームとして組み込んでいます。
新規追加をすれば、伝票番号が発番されて、サブフォームへ明細情報を入力する。

イメージ画像添付します。

どうすれば、11以降も、自動連番されるのでしょうか?
困っています。どうかよろしくお願いいたします。

こんばんは。どうしてなのか、原因がみつけられません。
解決方法をご教示いただけないでしょうか?よろしくお願いいたします。

事象:メインフォームの伝票番号が11番以上は自動連番されない。
(伝票番号10までは、新規追加すれば発番できていたのに、11以降、手入力で対応中。)

仕様:
table:伝票テーブル(伝票番号フィールドはテキスト型)
明細テーブル(明細番号フィールドはオートナンバー型)
※明細テーブルに伝票番号フィールドがあって、伝票テーブルの伝票番号フィールドとリレ...続きを読む

Aベストアンサー

テキスト型の比較では
"10" < "2" ですからね。

伝票番号フィールド を 数値型にすれば問題ないんですが、
それじゃダメなの?

QDISTINCTについて

こんにちは。質問させて下さい。

重複レコードを除くデータを取得する際、
DISTINCT キーワードを使用しますが
重複レコードを取得したい場合はどのようにすれば
よいのでしょうか?
宜しくお願いいたします。

Aベストアンサー

こんにちわ。
#1, #3 のmuyoshid です。

#3 のSQL を確認してみましたが、ORA-913 が出ちゃいました。
そんな訳で、インライン・ビューで確認してみました。
select * from test;
SQL> select * from test;
    F_A    F_B    F_C
---------- ---------- ----------
     1     2     3
     1     2     3
     2     3     4
     2     3     4
     3     4     5
SQL> select v.f_a, v.f_b, v.f_c from (Select f_a, f_b, f_c, count(*)
  from test group by f_a, f_b, f_c having count(*) > 1) v;
    F_A    F_B    F_C
---------- ---------- ----------
     1     2     3
     2     3     4

こんにちわ。
#1, #3 のmuyoshid です。

#3 のSQL を確認してみましたが、ORA-913 が出ちゃいました。
そんな訳で、インライン・ビューで確認してみました。
select * from test;
SQL> select * from test;
    F_A    F_B    F_C
---------- ---------- ----------
     1     2     3
     1     2     3
     2     3     4
     2     3     4
     3     4     5
SQL> select v.f_a, v.f_b, v.f_c from (S...続きを読む


人気Q&Aランキング

おすすめ情報