SQL server 2008 R2 と VB2010 で開発を行っています。
いま、月別の合計金額を計算するSQLがわからなくて困っています。
【売上明細テーブル】
・明細ID
・年月日
・得意先ID
・売上金額
出力したい内容は以下のような月別売上合計の推移です。
具体的にはこんな感じです。
得意先ID 3月売上 4月売上 5月売上
---------------------------------------
0001 1,111 2,222 3,333
0002 2,222 3,333 4,444
0003 5,555 0 6,666
得意先の中には売上の無い月もあります(0003の4月)が、
この場合も一覧に出したいと考えています。
1つのロウの中に異なる条件の値がある場合のSQLの組み立てがわかりません。
どうぞ宜しくお願いします。
No.1ベストアンサー
- 回答日時:
SELECT
得意先ID,
SUM( CASE MONTH(年月日) WHEN 1 THEN 売上金額 ELSE 0 END ) AS 1月売上,
SUM( CASE MONTH(年月日) WHEN 2 THEN 売上金額 ELSE 0 END ) AS 2月売上,
SUM( CASE MONTH(年月日) WHEN 3 THEN 売上金額 ELSE 0 END ) AS 3月売上,
SUM( CASE MONTH(年月日) WHEN 4 THEN 売上金額 ELSE 0 END ) AS 4月売上,
SUM( CASE MONTH(年月日) WHEN 5 THEN 売上金額 ELSE 0 END ) AS 5月売上,
SUM( CASE MONTH(年月日) WHEN 6 THEN 売上金額 ELSE 0 END ) AS 6月売上,
SUM( CASE MONTH(年月日) WHEN 7 THEN 売上金額 ELSE 0 END ) AS 7月売上,
SUM( CASE MONTH(年月日) WHEN 8 THEN 売上金額 ELSE 0 END ) AS 8月売上,
SUM( CASE MONTH(年月日) WHEN 9 THEN 売上金額 ELSE 0 END ) AS 9月売上,
SUM( CASE MONTH(年月日) WHEN 10 THEN 売上金額 ELSE 0 END ) AS 10月売上,
SUM( CASE MONTH(年月日) WHEN 11 THEN 売上金額 ELSE 0 END ) AS 11月売上,
SUM( CASE MONTH(年月日) WHEN 12 THEN 売上金額 ELSE 0 END ) AS 12月売上
FROM 売上明細テーブル
GROUP BY 得意先ID
年月日DADETIME型であることを想定しています。
年月日が複数年に渡る場合はWHERE条件で絞り込んでください。
売上金額をSQLでカンマ区切り書式の文字列にしたい時はCONVERTを活用します。
http://www.ilovex.co.jp/Division/SRD/archives/20 …
nora1962さん、ありがとうございました。
それと、返信が大変遅れてしまったことをお詫び致します。
教えて頂いた case~when でいろいろやってみて解決しました。
最初はよく理解できなくて、いろいろやり方を変えて行くうちに時間がたってしまし、
本当に申し訳ありませんでした。
No.2
- 回答日時:
SQL Server 2005より前なら、#1さんの回答のように 「case式で振り分けて・・・」といった方法でクロス集計を実装することが多いです。
SQL Server 2005からは、独自機能の pivotを使う方法があります。
例えば、次のようなSQLになります。
select
得意先ID
,[3] as "3月売上"
,[4] as "4月売上"
,[5] as "5月売上"
from
(
select
得意先ID
,month(年月日) as 月
,売上金額
from 売上明細テーブル
) as p
pivot
(
sum(売上金額)
for 月 in ([3],[4],[5])
) as pvt
order by pvt.得意先ID
;
参考URL:http://msdn.microsoft.com/ja-jp/library/ms177410 …
chukenkenkouさん、ありがとうございました。
それと、返信が大変遅れてしまったことをお詫び致します。
当初の問題はcase~whenを使ってナントカ解決しました。
教えて頂いたpivotはチョッと敷居が高いですが、今後はもっと勉強して取り組みたいと考えています。
お礼が遅くなって、本当に申し訳ありませんでした。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ビジネス・キャリア) 事業復活支援金の事前確認での売上高チェックについて 2 2022/03/26 13:47
- Excel(エクセル) エクセルでSUMIFS関数で条件範囲の部分が#valueになる。 4 2023/04/28 12:42
- 財務・会計・経理 事業復活支援金の事前確認について 2 2022/04/11 16:07
- その他(税金) 事業復活支援金の事前確認ってどこまでチェックされるのでしょうか? 1 2022/04/22 11:55
- Excel(エクセル) エクセルで、未来の月の数値を表示させないようにしたい 1 2022/05/07 18:58
- Excel(エクセル) エクセルで最初に値が入っているセルを見つける方法はありますか? 2 2023/07/18 14:58
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- 確定申告 確定申告を前に、帳簿を修正したら「持続化給付金」の調査に影響しますか? 1 2023/02/28 11:06
- 株式市場・株価 同日中の特定口座内での株式売買における実質損益について 4 2022/06/22 05:18
- 財務・会計・経理 【仕訳】集計されて引かれる販売手数料について 5 2023/04/26 15:32
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
MySQLで改行を含む文の登録のし...
-
フォームで検索 エラーの表示...
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
ORA-01722: 数値が無効です
-
Excel 2019 のピボットテーブル...
-
エクセルVBAで5行目からオート...
-
「直需」の意味を教えてください
-
Access テキスト型に対する指定...
-
BLOB型のPDF出力の方法
-
ACCESSのクエリで集計で、先頭...
-
作番ってどういう意味でしょうか?
-
エクセルグラフの凡例スペース
-
アクセス メモ型 255文字...
-
Oracle 2つのDate型の値の差を...
-
accessで重複を防ぎたい
-
Accessのリンクテーブルのパス...
-
Accessでテーブル名やクエリ名...
-
Accessレコードの追加や変更が...
-
3つの表を1つに縦に連結する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLでグループ化した結果の件数...
-
ORA-01722: 数値が無効です
-
項目名の制限について
-
MySQLで改行を含む文の登録のし...
-
フォームで検索 エラーの表示...
-
オラクルSQLの累計値取得方法に...
-
列名無効について
-
【 困 】 ストアドプロシージャ
-
Accessで期間指定の売上合計と...
-
♪Oracle SQL 処理が成功した時...
-
アクセスのクエリについて(前...
-
外部結合のSQLの書き方について
-
SQL文 2つのテーブルから、グ...
-
Accessで複数テーブルのJoin
-
SQLを教えてください
-
各店舗毎の最大売上の項目を取...
-
SQLを教えて下さい
-
以下のようなSQLについて教えて...
-
特殊なレコードの取得方法
-
改行コードを削除して取得する...
おすすめ情報