我有一个查询,它会在一个月的时间内返回行数(distinct child_name)。我想写一个查询,这样我可以带回多个月的总数。我希望能够选择一个时间范围,并在我选择自动计算的范围内的月份,而不是每个月的硬编码。我读了一些关于循环和序列的信息,但我发现很难理解。
DECLARE @From_DT DATE = '2012-07-01', @To_DT DATE = '2013-7-30';
SELECT count(Child_Name) as July12_Count
FROM ECMS_BACKUP.dbo.vw_B2H_CLIENTS
WHERE CLT_NBR IN (SELECT CLT_NBR FROM ECMS_BACKUP.dbo.ufn_B2H_Enrolled_Clients_List(@From_DT, @To_DT))
我希望得到如下结果而不需要硬编码。
如果我选择:
DECLARE @From_DT DATE = '2012-07-01', @To_DT DATE = '2013-10-31';
我会得到这个:
July12_Count Aug13_Count Sep13_Count Oct13_Count
251 255 250 245
感谢任何反馈!
答案 0 :(得分:1)
我必须假设vw_B2H_CLIENTS
中的一列是您要过滤的日期。
在这种情况下,您可以尝试使用DATEPART
按月分组(将DATE_COL
替换为日期列),如下所示:
SELECT DATEPART(month, DATE_COL) AS Month,
COUNT(*) AS Count
FROM ECMS_BACKUP.dbo.vw_B2H_CLIENTS
WHERE CLT_NBR IN (SELECT CLT_NBR FROM ECMS_BACKUP.dbo.ufn_B2H_Enrolled_Clients_List(@From_DT, @To_DT))
GROUP BY DATEPART(month, DATE_COL)
另请注意,ufn_B2H_Enrolled_Clients_List
可能会出现错误,因为您有@From_DT
作为参数两次(您可能需要@To_DT
)。
这会给你这样的输出:
Month Count
7 251
8 255
9 250
10 245