こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

SQL Serverで、四半期刻みの年間売上数取得

システム開発の仕事を行っています。
SQL Server(2008?)で、
20154期実績:20151期~20154期の売上数
20161期実績:20152期~20161期の売上数
20162期実績:20153期~20162期の売上数
20163期実績:20151期~20154期の売上数
というように、四半期刻みで1年間の担当者別売り上げ数が取りたいのですが、
良い方法が思い浮かびません。

ほげテーブル
年月度  名前   売上数
--------------------------------------
20151期  佐藤  2
20152期  佐藤  1
20153期  佐藤  1
20154期  佐藤  1
20161期  佐藤  2
20162期  佐藤 3
20151期  山田  1
20152期  山田  2
20153期  山田 1

ほしい結果
20154期 佐藤 5個
20154期 山田 4個
20161期 佐藤 5個
20161期 山田 3個
20162期 佐藤 7個
20162期 山田 1個
↑こんなふうにデータを取得したい

Where句で期間の条件を固定にし、
UNIONを使って繋げていけば取れなくも無いですが、
実際のデータは2000年1月~現在まであるので
クエリの長さ的にもレスポンス的にもよろしくないかと。。
出来る限り簡潔なクエリで
「四半期ごとに過去1年間分の実績」を取得するやりかたは無いものでしょうか。

ご教授いただけたら幸いです。

投稿日時 - 2016-10-21 01:01:06

QNo.9245538

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

これでどうでしょうか。

declare @hoge table(年月度 int,名前 nvarchar(max),売上数 int)
insert @hoge values
(20151,'佐藤',2)
,(20152,'佐藤',1)
,(20153,'佐藤',1)
,(20154,'佐藤',1)
,(20161,'佐藤',2)
,(20162,'佐藤',3)
,(20151,'山田',1)
,(20152,'山田',2)
,(20153,'山田',1)

select 年月度,名前,
(select cast(SUM(売上数)as nvarchar) from @hoge as sub
where sub.年月度 between
main.年月度 - case right(main.年月度,1) when 4 then 3 else 9 end and main.年月度
and main.名前 = sub.名前
) + '個' as 売上数
from
(select distinct 年月度,名前 from @hoge )
as main

投稿日時 - 2016-10-26 17:36:28

あなたにオススメの質問