重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

SQLの初心者です。

ACCESSで売上げ管理をしようと考えています。
売上げに関するテーブルは以下のようになっています。

●売上げヘッダ テーブル
  伝票番号(キー)
  売上日
  売上げ金額
   :

●売上げ明細 テーブル
  伝票番号(キー)
  枝番(キー)
  商品コード
  商品名
  単価
  数量
  値引金額
   :


値引金額は商品ごとに決まり、値引きしなければ0が、値引きがあればその金額が入ります。

売上げ一覧を表示する時に、以下のようなイメージで、
ワークテーブルを作って、値引きがあれば「あり」と画面に表示させたいのです。
※無い時は何も表示させません

伝票番号  売上日  売上げ金額 値引き有無
9999 2004/1/1 10,000
10000 2004/1/2 1,500 あり
10001 2004/1/2 20,000
10002 2004/1/3 18,900
10003 2004/1/4 23,500 あり

1回のSQLで実行したいのですが、SQLには詳しくないので、
どのように書けばよいか分かりません。
よろしくお願いします。

値引き区分が無ければ、売上げヘッダを見るだけなのですが、
値引きがあるかどうかは、売上げ明細まで見なければいけないので、
SQLの書き方が分からないのと、以下のようなワークテーブルを
作る必要があると思うのですが、どうなのでしょうか。

●ワーク テーブル
  伝票番号
  売上日
  売上げ金額
  値引き区分

A 回答 (3件)

よく考えると、別に副問い合わせ ( SELECT ~ FROM (SELECT ~ ) の形 ) にする必要ありませんでした。


という訳で、↓こんな感じ。

SELECT
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額,
IIf(Sum(売上げ明細.値引金額)=0,"なし","あり") AS 値引有無,
IIf(Sum(IIf([コメント] Is Null,1,0))<>0,"×","○") AS コメント有無
FROM 売上ヘッダー INNER JOIN 売上げ明細 ON 売上ヘッダー.伝票番号 = 売上げ明細.伝票番号
GROUP BY 売上ヘッダー.伝票番号, 売上ヘッダー.売上日, 売上ヘッダー.売上げ金額
;
    • good
    • 0
この回答へのお礼

ありがとうございます。
完璧です!

お礼日時:2004/03/06 13:04

すみません、失敗しました。

(^^;
↓のような感じでうまくいくと思います。

SELECT
伝票番号,
売上日,
売上げ金額,
IIf([値引金額合計]=0,"なし","あり") AS 値引有無
FROM
(
SELECT
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額,
Sum(売上げ明細.値引金額) AS 値引金額合計
FROM 売上ヘッダー INNER JOIN 売上げ明細 ON 売上ヘッダー.伝票番号 = 売上げ明細.伝票番号
GROUP BY
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額
);

この回答への補足

早速の回答ありがとうございます。
お蔭様で期待した結果になりました。

あと、もう1点追加で質問がありますので、お付き合い願います。
売上げ明細テーブルに、コメント(テキスト)フィールドを追加します。
画面上の値引き有無の代わりに、コメント有無に変更して、売上げごとに、
コメントが1件でも入力されていなかったら(nullだったら)X印を出したい
のですが、どのようにすれば良いでしょうか。
※1つの売上げに明細が3商品あった場合、コメントが1つでもnullならXを
 出したいです。

よろしくお願いします。

●売上げ明細 テーブル
  伝票番号(キー)
  枝番(キー)
   :
  値引金額
  コメント  ←追加
   :

伝票番号  売上日  売上げ金額 コメント有無
9999 2004/1/1 10,000
10000 2004/1/2 1,500 X
10001 2004/1/2 20,000
10002 2004/1/3 18,900
10003 2004/1/4 23,500 X

補足日時:2004/03/06 01:26
    • good
    • 0

(1) 売上ヘッダーと売上明細を伝票番号で結合


(2) 売上ヘッダーの項目で集計
(3) 売上明細の値引金額は合計にする(非表示でもOK)
(4) 値引有無: IIf([値引金額]=0,"なし","あり") という項目を作る。

で、↓こんな SQL になりました。
SELECT
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額,
IIf([値引金額]=0,"なし","あり") AS 値引有無
FROM 売上ヘッダー
INNER JOIN 売上げ明細 ON 売上ヘッダー.伝票番号 = 売上げ明細.伝票番号
GROUP BY
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額,
IIf([値引金額]=0,"なし","あり");

この回答への補足

早速の回答ありがとうございます。
試してみましたが、期待した結果と少し違いました。
説明不足でしたが、売上げ明細には複数の商品が存在し(枝番が変わります)、商品ごとに値引きが変わります。
教えていただいたSQLでは以下のようになりました。

伝票番号 売上日  売上げ金額 値引有無
1000 2004/01/01 1000 あり
1000 2004/01/01 1000 なし
1001 2004/01/02 2000 なし
1002 2004/01/03 3000 あり
1002 2004/01/03 3000 なし

同じ伝票番号が「あり」と「なし」で2行出てしまいます。
1つの伝票番号で、1商品でも値引きがあれば「あり」、無ければ「なし」となるようには、どのようにすればよいでしょうか。

補足日時:2004/03/05 23:10
    • good
    • 0

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

関連するカテゴリからQ&Aを探す