使用TSQL对具有开始和结束日期的对象进行每月计数
我想创建一个条形图,显示每月可用的对象数量。所有行都有开始和结束日期。我知道如何计算一个月的数量:使用TSQL对具有开始和结束日期的对象进行每月计数,tsql,count,Tsql,Count,我想创建一个条形图,显示每月可用的对象数量。所有行都有开始和结束日期。我知道如何计算一个月的数量: SELECT COUNT(*) As NumberOfItems FROM Items WHERE DATEPART(MONTH, Items.StartDate) <= @monthNumber AND DATEPART(MONTH, Items.EndDate) >= @monthNumber 现在,我想创建SQL,使用一个SELECT语句来获取月数和项数 有什么优雅的方法可以
SELECT COUNT(*) As NumberOfItems
FROM Items
WHERE DATEPART(MONTH, Items.StartDate) <= @monthNumber
AND DATEPART(MONTH, Items.EndDate) >= @monthNumber
现在,我想创建SQL,使用一个SELECT语句来获取月数和项数
有什么优雅的方法可以做到这一点吗?我知道我必须考虑年份号。假设Sql Server 2005或更高版本 CTE部件将返回跨越@startDate和@endDate之间年份的月数。主体将月数与对items.StartDate和items.EndDate执行相同转换的项连接起来
; with months (month) as (
select datediff (m, 0, @startDate)
union all
select month + 1
from months
where month < datediff (m, 0, @endDate)
)
select year (Items.StartDate) Year,
month (Items.StartDate) Month,
count (*) NumberOfItems
from months
inner join Items
on datediff (m, 0, Items.StartDate) <= months.month
and datediff (m, 0, Items.EndDate) >= months.month
group by
year (Items.StartDate),
month (Items.StartDate)
注意:如果您打算跨越100个月以上,您需要在查询结束时选择maxrecursion 0。因此,为了澄清我知道我必须考虑年份号,您是希望12行,而不管项目的日期范围是什么,还是希望如2011年3月和2012年3月作为不同的行?