
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の書き方が分からないのと、以下のようなワークテーブルを
作る必要があると思うのですが、どうなのでしょうか。
●ワーク テーブル
伝票番号
売上日
売上げ金額
値引き区分
No.3ベストアンサー
- 回答日時:
よく考えると、別に副問い合わせ ( SELECT ~ FROM (SELECT ~ ) の形 ) にする必要ありませんでした。
という訳で、↓こんな感じ。
SELECT
売上ヘッダー.伝票番号,
売上ヘッダー.売上日,
売上ヘッダー.売上げ金額,
IIf(Sum(売上げ明細.値引金額)=0,"なし","あり") AS 値引有無,
IIf(Sum(IIf([コメント] Is Null,1,0))<>0,"×","○") AS コメント有無
FROM 売上ヘッダー INNER JOIN 売上げ明細 ON 売上ヘッダー.伝票番号 = 売上げ明細.伝票番号
GROUP BY 売上ヘッダー.伝票番号, 売上ヘッダー.売上日, 売上ヘッダー.売上げ金額
;
No.2
- 回答日時:
すみません、失敗しました。
(^^;↓のような感じでうまくいくと思います。
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
No.1
- 回答日時:
(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商品でも値引きがあれば「あり」、無ければ「なし」となるようには、どのようにすればよいでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
GROUP BYの記述方法について
-
列名無効について
-
オラクルSQLの累計値取得方法に...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
ACCESS検索★ある文字を複数のフ...
-
Accessで、固定アルファベット+...
-
Oracle 2つのDate型の値の差を...
-
INSERT INTO ステートメントに...
-
Accessでテーブル名やクエリ名...
-
Accessのフィールド数が255しか...
-
Countと受付状態の表示に...
-
エクセルVBAで5行目からオート...
-
accsessで顧客コードで氏名を呼...
-
【Access】フォームで自動計算...
-
カウントが出来ません
-
ACCESSで400以上のフィールドが...
-
再計算って出来ますか?
-
Accessのクエリでデータの入力...
-
Access2000 更新のタイミング?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
MySQLで改行を含む文の登録のし...
-
項目名の制限について
-
フォームで検索 エラーの表示...
-
列名無効について
-
Accessで期間指定の売上合計と...
-
ORA-01722: 数値が無効です
-
改行コードを削除して取得する...
-
縦表示データを列として取得す...
-
DATA 集計
-
SQL抽出方法:売上Tを集計した...
-
SQLServerにおける累積、累計取...
-
オラクルSQLの累計値取得方法に...
-
DB設計
-
SQL抽出方法に悩んでいます④
-
以下のようなSQLについて教えて...
-
SQL抽出方法に悩んでいます。 S...
-
インサート文での条件の指定に...
-
ORACLEのUPDATEについて...
-
SQLでNOT INと!=ALLの違い
おすすめ情報