すみません、教えてください。
得意先の売上額上位10社のそれぞれについて、仕入合計額上位10商品のリストを出力するSQL
文をがわからなくて困っています。
できれば、一般的なSQL文(SQL92)でお願いします。
テーブルは、下記の2つです。
--------------------------------------------
・t_売上明細
売上日
得意先コード
商品コード
売上金額
・t_商品マスタ
商品コード
仕入単価
<出力>======================================
得意先コード, 売上合計,商品コード,仕入額合計
--------------------------------------------
C3 \300100
A08 \32500
A04 \31000
~~~
A10 \30000(Top10)
C2 \200200
A05 \22500
A04 \21000
~~~
A10 \20000(Top10)
~~~ ~~~
C10 \1000(Top10)
A97 \500
A14 \100
~~~
A96 \10(Top10)
================================
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
> ちなみに、SQL99ですと、もう少しスマートになるのでしょうか?
SQL99 だと WITH 句を使って整理すれば、少しはマシになるかも知れません。
SQL2003 のウィンドウ関数や Oracle の rownum を使えば、かなりスッキリしそうです。
http://ja.wikipedia.org/wiki/%E3%82%A6%E3%82%A3% …
http://docs.oracle.com/cd/E16338_01/server.112/b …
No.2
- 回答日時:
下記の前提で考えました。
・t_売上明細には売上個数のカラムも存在する
・どのテーブルのどの項目にも null は存在しない
・売上日に関する指定は無いので全期間の合計
SQL92しばりということなので、かなりややこしく、また、おそらく相当非効率になってしまいましたが、出来ることは出来ると思われます。
----------------------------------------
SELECT a.得意先コード, 売上合計, 商品コード, 仕入額合計 FROM
(
SELECT 得意先コード, SUM(売上金額) AS 売上合計
FROM t_売上明細 GROUP BY 得意先コード
ORDER BY SUM(売上金額) DESC LIMIT 10
) a
INNER JOIN
(
SELECT 得意先コード, 商品コード, SUM(売上個数 * 仕入単価) AS 仕入額合計
FROM t_売上明細 b INNER JOIN t_商品マスタ c USING(商品コード)
GROUP BY 得意先コード, 商品コード
HAVING
(
SELECT COUNT(*) FROM
(
SELECT 商品コード
FROM t_売上明細 d INNER JOIN t_商品マスタ USING(商品コード)
WHERE b.得意先コード = d.得意先コード
GROUP BY 商品コード
HAVING SUM(売上個数 * 仕入単価) > SUM(b.売上個数 * c.仕入単価)
) e
) < 10
) f
USING(得意先コード)
ORDER BY 売上合計 DESC, 得意先コード, 仕入額合計 DESC, 商品コード;
----------------------------------------
最初のサブクエリ(a)は売上合計の取得とその上位10社への絞込み、次のサブクエリ(f)は仕入額合計の取得とその得意先毎の上位10商品への絞込みを行なっています。
なお、売上合計が同じ得意先が有って10位が複数有る場合などは、その内どれか一つしか抽出されません。その場合、最初のサブクエリ(a)もHAVINGを使って絞り込む様にすれば、全て抽出されるようになります。
参考URL:http://codezine.jp/article/detail/460
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセル 関数について 4 2022/08/05 11:03
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- その他(ビジネス・キャリア) 事業復活支援金の事前確認での売上高チェックについて 2 2022/03/26 13:47
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 会計ソフト・業務用ソフト Excelで売上げデータの中の任意の商品の合計を出したい 3 2023/01/18 18:19
- その他(買い物・ショッピング) JANコードの登録について 1 2022/07/23 14:19
- Visual Basic(VBA) VBAで質問があります 1 2022/10/19 10:32
- 簿記検定・漢字検定・秘書検定 簿記2級 未実現利益 基本的な計算が分かりません。。。 Q 1の未実現利益の計算です。親会社は子会社 1 2022/07/13 13:50
- 簿記検定・漢字検定・秘書検定 簿記2級 売上原価の計算と期末商品の評価に関する質問 3 2023/06/24 23:50
- その他(教育・科学・学問) ある店舗はA商品を原価200円で仕入れ280円で販売し、B商品を300円で仕入れ460円で販売する計 2 2023/01/16 16:10
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
項目名の制限について
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
オラクルSQLの累計値取得方法に...
-
♪Oracle SQL 処理が成功した時...
-
フォームで検索 エラーの表示...
-
MySQLで改行を含む文の登録のし...
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Access テキスト型に対する指定...
-
Accessでテーブル名やクエリ名...
-
ORACLEでLONG項目からCHAR項目...
-
Oracle 2つのDate型の値の差を...
-
Accessで数値型にNULLをInsert...
-
テーブルの存在チェックについて
-
ACCESSでの改行コード
-
アクセス エラーを数値「0」に...
-
BLOB型のPDF出力の方法
-
変数が選択リストにありません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
MySQLで改行を含む文の登録のし...
-
項目名の制限について
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
列名無効について
-
フォームで検索 エラーの表示...
-
オラクルSQLの累計値取得方法に...
-
SQL文のエラーについて
-
縦表示データを列として取得す...
-
♪Oracle SQL 処理が成功した時...
-
SQLでNOT INと!=ALLの違い
-
アクセスのクエリについて(前...
-
Accessで期間指定の売上合計と...
-
改行コードを削除して取得する...
-
SQL文 2つのテーブルから、グ...
-
Oracleでテーブルの結合について
-
以下のようなSQLについて教えて...
-
LEFT JOINとRIGHT JOINについて
-
SQL文(県名一覧・・)
-
SQL文の書き方
おすすめ情報