事实记录中的多个日期

时间:2014-05-07 17:46:04

标签: tsql fact

我有一个事实表,可以跟踪特定人群的多个操作和日期。我很难创建一个返回结果集的查询,我期望这个表。以下是此表的示例:

Record  applicant_count applicant_date  accepted_count  accepted_date   registered_count    registered_date
1       1   3            03/01/2014                
2       1   2            02/01/2014      1   3            03/01/2014      1   5                05/05/2014
3       1   1            01/01/2014      1   5            05/01/2014      1   5                05/01/2014
4       1   2            02/01/2014      1   4            04/15/2014       
5       1   4            04/01/2014                

有5个应用程序的5条记录,3个已接受,以及整个集合的2个已注册记录。我需要知道如何编写一个可以计算特定日期的计数的查询,比如2014年4月20日。在那一天,我希望查询返回5个申请人,2个接受,0个注册。 任何帮助,将不胜感激。

1 个答案:

答案 0 :(得分:0)

查看您的示例数据,我不确定根据日期对记录进行分组和计数的条件是什么。

这是完整的工作示例,展示了如何在聚合函数中添加filter条件:

DECLARE @DataSource TABLE
(
     [Record] TINYINT
    ,[applicant_count] TINYINT
    ,[applicant_date] DATETIME2
    ,[accepted_count] TINYINT
    ,[accepted_date] DATETIME2
    ,[registered_count] TINYINT
    ,[registered_date] DATETIME2
)

INSERT INTO @DataSource ([Record], [applicant_count], [applicant_date], [accepted_count], [accepted_date], [registered_count], [registered_date])
VALUES (1, 11, '03/01/2014', NULL,  NULL,  NULL, NULL)
      ,(2, 12, '02/01/2014', 12, '03/01/2014',  11, '05/05/2014')
      ,(3, 13, '04/05/2014', 13, '05/01/2014',  10, '05/01/2014')
      ,(4, 14, '02/01/2014', 11, '04/05/2014',  NULL, NULL)
      ,(5, 15, '04/05/2014', NULL,  NULL, NULL, NULL)

DECLARE @Date DATETIME2 = '4/20/2014'

SELECT SUM(IIF([applicant_date] = '4/05/2014', [applicant_count], 0)) AS [applicant_date]
      ,SUM(IIF([applicant_date] = '4/05/2014', [accepted_count], 0)) AS [accepted_count]
      ,SUM(IIF([applicant_date] = '4/05/2014', [registered_count], 0)) AS [registered_count]
FROM @DataSource 

注意SUM

中的条件
IIF([applicant_date] = '4/05/2014', [applicant_count], 0)

这意味着,如果日期等于我们正在对结果求和,如果没有,则添加0。你可以自由地改变你喜欢的状态。

希望得到这个帮助。