【发布时间】:2013-08-05 17:05:41
【问题描述】:
我有一个查询可以返回一个月的行数(不同的 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
感谢任何反馈!
【问题讨论】:
-
不确定
ufn_B2H_Enrolled_Clients_List(@From_DT, @From_DT)是否应该是ufn_B2H_Enrolled_Clients_List(@From_DT, @To_DT)(注意从@From_DT到@To_DT的变化) -
@Martin Parkin 是的,应该是 From_DT 到 To_DT。谢谢。
-
@From_DT和@To_DT之间的最大时间范围是多少?不到 1 年或更长?如果一些用户使用这些参数执行这个存储过程:'2012-01-01'&'2013-0-30'怎么办? -
@BogdanSahlean 是的,一年
-
那么你应该检查这些参数。如果用户输入以下值会发生什么:
'2012-01-15'&'2013-01-14'?您的查询将返回来自January 2012和January 2013的行。