
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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フォームで検索 エラーの表示...
-
SQL文のエラーについて
-
Excel 2019 のピボットテーブル...
-
ワードで4段組みで文章を書い...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
テーブルの存在チェックについて
-
ファイルメーカーでCountifの様...
-
【マクロ】列を折りたたみ非表...
-
日本語のテーブル名、カラム名...
-
Oracle 2つのDate型の値の差を...
-
AccessからExcelへエクスポート...
-
Accessクエリーで両方のテーブ...
-
Accessクエリでの、LIKE条件
-
エクセルグラフの凡例スペース
-
Accessのクエリでデータの入力...
-
AccessからExcelのデータを消す...
-
SQL: SELECT UNIONすると文字数...
-
ACCESSで400以上のフィールドが...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01722: 数値が無効です
-
フォームで検索 エラーの表示...
-
SQLでグループ化した結果の件数...
-
項目名の制限について
-
改行コードを削除して取得する...
-
MySQLで改行を含む文の登録のし...
-
集計のSQLをお教え下さい
-
アクセスのクエリについて(前...
-
SQL文 2つのテーブルから、グ...
-
Access クエリ内のクエリ
-
Accessで期間指定の売上合計と...
-
SQLが分かりません
-
updateについて(SQL)
-
SQL文 グループ集計TOPに対する...
-
オラクルSQLの累計値取得方法に...
-
集合関数(MIN)で取得した値を...
-
ORACLEのUPDATEについて...
-
日付に関するSQL分で
-
SQLの抽出方法について
-
列名無効について
おすすめ情報