0

ordersorderidとを持つテーブルがありますOrderDate

SQL Server で 1990 年から 1995 年、1995 年から 2000 年、2000 年から 2005 年などの合計注文数など、5 年間のバッチでデータを取得したいと考えています。

例えば ​​:

Period          Orders
1990-1995       4500
1995-2000       7000
2000-2005       9000

前もって感謝します

4

4 に答える 4

0

これは、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

お役に立てれば

于 2013-10-15T06:57:09.357 に答える
0

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

sql fiddle demo

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.

于 2013-10-15T06:49:35.077 に答える