0

我有一个查询可以返回一个月内的行数(不同的 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

任何反馈表示赞赏!

4

1 回答 1

1

我必须假设其中一列vw_B2H_CLIENTS是您过滤的日期。

在这种情况下,您可以尝试使用DATEPARTin order 按月份分组(替换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
于 2013-08-05T17:24:51.077 回答