2009年の売上データと増減を取得するSQL文
- 売上テーブルから、2009年の売上データと2008年と比較した売上数の増減を取得するSQL文を教えていただきたいです。
- 次のような売上テーブルから、商品の昇順で2009年のデータと2008年と比較した売上数の増減を取得したいです。
- 売上テーブルから、2009年のデータと2008年と比較した商品の売上数の増減を取得するためのSQL文を教えてください。
- ベストアンサー
SQL
以下のような売上テーブルから、 「2009年のデータ」と「2008年と比較した2009年の売上数の増減」を 取得したいです。(商品の昇順で) 取得できるSQL文を教えていただきたいです。 どうぞよろしくお願いいたします。 <売上テーブル> 年, 商品, 売上数 --------------- 2008, A, 30 2008, B, 20 2008, C, 20 2009, A, 10 2009, C, 40 2009, D, 50 <結果>↓ 商品, 2009年の売上数, 増減 ------------------------- A, 10, -20 B, , -20 C, 40, 20 D, 50, 50
- i02024
- お礼率100% (1/1)
- その他(プログラミング・開発)
- 回答数1
- ありがとう数1
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
下記のような事を行えばよいかと。 1. 2009年と2008年で絞込み 2. 1を商品が同じという条件で自己結合 3. 商品と2009年の売上数を取得 4. 2009年の売上数から2008年の売上数を引いて増減を算出(ただし null の場合は0とみなすようにする) 5. 商品の昇順でソート 例) -------------------------------------------------------------- SELECT CASE WHEN a.商品 IS NULL THEN b.商品 ELSE a.商品 END AS 商品, a.売上数 AS 2009年の売上数, CASE WHEN a.売上数 IS NULL THEN 0 ELSE a.売上数 END - CASE WHEN b.売上数 IS NULL THEN 0 ELSE b.売上数 END AS 増減 FROM 売上テーブル a FULL OUTER JOIN 売上テーブル b USING(商品) WHERE a.年 = 2009 AND b.年 = 2008 ORDER BY 商品 ------------------------------------------------------------------ (何のDBMSが対象なのか分からないので、例は標準SQLに沿うように書きました)
関連するQ&A
- 【SQL2000】アクセスログからレコメンド機能(ビュー)を作りたい
SQL文の組み立て方がさっぱりわからないので質問です。 ある商品テーブルの閲覧履歴テーブルから、レコメンドエンジンを 作りたいと思っています。 (amazonなどである「この商品を見た人はこんな商品も見ています」ってヤツです) 以下AテーブルからBのビューを導きたいのですが どのようなSQL文を書けばいいのでしょうか? ■Aテーブル ┌────┬────────┐ │商品番号│見た人 │ ├────┼────────┤ │1 │A │ ├────┼────────┤ │1 │B │ ├────┼────────┤ │2 │A │ ├────┼────────┤ │2 │B │ ├────┼────────┤ │4 │C │ ├────┼────────┤ │5 │D │ ├────┼────────┤ │9 │B │ ├────┼────────┤ │10 │B │ ├────┼────────┤ │11 │D │ ├────┼────────┤ │11 │B │ ├────┼────────┤ │12 │A │ ├────┼────────┤ │12 │B │ ├────┼────────┤ │12 │C │ └────┴────────┘ ■Bビュー ┌────┬────────┐ │商品番号│他に見た商品番号│ ├────┼────────┤ │1 │2 │ ├────┼────────┤ │1 │12 │ ├────┼────────┤ │2 │1 │ ├────┼────────┤ │2 │12 │ ├────┼────────┤ │11 │5 │ ├────┼────────┤ │11 │1 │ ├────┼────────┤ │11 │2 │ ├────┼────────┤ │11 │10 │ ├────┼────────┤ │11 │12 │ ├────┼────────┤ │12 │1 │ ├────┼────────┤ │12 │2 │ ├────┼────────┤ │12 │4 │ ├────┼────────┤ │12 │9 │ ├────┼────────┤ │12 │10 │ ├────┼────────┤ │12 │11 │ └────┴────────┘ 考え方だけでも構いませんのでご教示いただければ幸いです。
- ベストアンサー
- SQL Server
- SQL文で
すみません。質問させてください。 A,B,C,D,Eと5個のフィールドで構成されたテーブルtableがあるとします。 tableにはデータがすべて格納され(NULLなし)ています。 ですが、フィールドA,C,DについてA,C,Dとも同じデータが格納される ことがあります。 その重複したデータ以外を取得したいのですが (要するにフィールドA,C,Dでユニークのデータのみ取得) SQL文でどのように書けばいいかわかりません。 よろしくお願いいたします
- 締切済み
- その他(プログラミング・開発)
- 要求を満たすことのできるSQL文を教えてください
現在、売上の明細を明細IDごとにグループ化し合計値を表示させるプログラムを開発中です。 以下のような要件を満たすSQL文を教えてください。 【もともとの売上の明細のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1000 001 |商品B | 500 001 |商品C | 300 002 |商品A | 1000 002 |商品D | 1500 【グループ化後のテーブル】 明細ID | NAME | KINGAKU 001 |商品A | 1800 002 |商品D | 2500 ・明細IDごとに金額を合計する。 ・NAMEの列については、その明細IDの中で最大の金額の商品名を入れる。 ※現在、明細IDごとに金額を合計するのはできているのですが、 もう1つの要件をどのようにすれば達成できるのか分からない 状況です。要件を満たすことのできるSQL文をぜひ教えてください。 よろしくお願いいたします。
- ベストアンサー
- SQL Server
- SQLを教えてください!!
テーブルAとテーブルBがあり、両方に存在しないものを抽出してエラーとする処理を行いたいのですが、 どういうSQlを書いたらいいのか教えてください。 下記例としてテーブルにデータがあったとしたら、結果として 004 商品D 005 商品E 006 商品G というデータを抽出したいのですが・・ テーブルA テーブルB ------------- ----------------------- コード 商品名 NO コード 商品名 001 商品A 1 001 商品A 002 商品B 2 001 商品A 003 商品C 3 002 商品B 004 商品D 4 003 商品C 006 商品G 5 003 商品C 6 005 商品E
- 締切済み
- その他(プログラミング・開発)
- SQLの書き方について教えてください。
SQL Server2000で下記のようなSQL文を書きたいと思っています。 テーブルAとテーブルAに無関係な2個のフィールドを 持つテーブルBがあり、テーブルAのデータをテーブルBにコピー したいと考えています。その際にテーブルBの2個のフィールドに対して 決められた値を挿入したいのですがどのように記述すればよいのか わかりません。 お分かりの方お教えいただけませんでしょうか よろしくお願いいたします。 下記の記述をしています。 INSERT INTO テーブルB ( A, B, C, D ) SELECT テーブルA.A, テーブルA.A, XXX1, XXX2 FROM reserveSETdateTRN; Cに東京 Dに品川 を入れたいと思っています
- 締切済み
- SQL Server
- こんなSQLを教えてください
こんなSQLを教えてください <更新前> テーブル1 |キー|コード| | 1| a| | 2| b| | 3| c| テーブル2 |キー|コード| | 2| B| | 4| D| <更新後> テーブル1 |キー|コード| | 1| a| | 2| B| | 3| c| こんなふうに テーブル1と同じデータがテーブル2にあったら テーブル1を書き換えるUPDATE文を教えてください
- ベストアンサー
- Oracle
- SQL文をご教授願います
SQL文をご教授願います。 以下のようなテーブルを仮定しています。 A B C D ---------------------- 10 100 1203 A 10 200 1204 B <--- 取得したい 11 300 1203 C 11 300 1204 D <--- 12 400 1206 D 12 500 1207 E <--- ・ ・ A列をー意にして、A列・D列のデータを取得したい 条件 Bの大きい方を取得する Bの値が同じ場合はCの大きい方を取得する。 (A列には同じデータが2以上あるとします) (C列には同じデータはありません) 欲しい結果 A D -------- 10 B 11 D 12 E
- ベストアンサー
- その他(データベース)
- SQL文おしえてください
例えば、以下のような 2 つのテーブルがあるとします。 営業所テーブル (会社名) (担当者名) 会社A 担当者A 会社A 担当者B 会社B 担当者C 会社C 担当者D 商品売上テーブル (担当者) (売上) 担当者A 10万 担当者C 5万 担当者D 10万 これを以下のように会社名Aの会社だけを条件に「担当者B」の売上レコードがない場合でも、ゼロ件としてレコードを取得したいんですがどのようにすればよいのでしょうか。 (会社名)(担当者) (売上) 会社A 担当者A 10万 会社A 担当者B 0万 よろしくお願いします。
- ベストアンサー
- その他(プログラミング・開発)
お礼
ご回答ありがとうございました。 (ちなみにDBMSはOracleです。ご配慮ありがとうございます。)