orders列orderidとを持つテーブルがありますOrderDate。
SQL Server で 1990 年から 1995 年、1995 年から 2000 年、2000 年から 2005 年などの合計注文数など、5 年間のバッチでデータを取得したいと考えています。
例えば :
Period Orders
1990-1995 4500
1995-2000 7000
2000-2005 9000
前もって感謝します
orders列orderidとを持つテーブルがありますOrderDate。
SQL Server で 1990 年から 1995 年、1995 年から 2000 年、2000 年から 2005 年などの合計注文数など、5 年間のバッチでデータを取得したいと考えています。
例えば :
Period Orders
1990-1995 4500
1995-2000 7000
2000-2005 9000
前もって感謝します
これは、1 つのサブクエリを使用した明確な構文だと思います。
SELECT CAST(T.YearDivision * 5 AS nchar(4)) + N' - ' + CAST(T.YearDivision * 5 + 4 AS nchar(4)) AS YearRange, SUM(T.TotalCount) AS TotalOrders
FROM
(
SELECT YEAR(Date) / 5 AS YearDivision, Date, COUNT(*) AS TotalCount
FROM Orders
GROUP BY Date
) T
GROUP BY YearDivision
連続する各範囲の終わりと始まりの年を繰り返す年の範囲が重複していると思います。ここで重複を削除します。
これは、私のデータベースの 1 つのサンプル テーブルに対するこのクエリの結果です。
YearRange TotalOrders
----------- -----------
2005 - 2009 2680
2010 - 2014 1395
お役に立てれば
This solution gives you desired output - see sql fiddle below:
with cte as (
select
(year(OrderDate) / 5) * 5 as y
from orders
)
select
cast(y as nvarchar(4)) + '-' + cast(y + 5 as nvarchar(4)) as Period,
count(*) as Orders
from cte
group by y
Here I'm using cte so you don't have to repeat your code twice in group by clause and in select. You can easily switch cte to subquery, but I think cte is much cleaner and easier to read.