Несколько дат в записи факта

У меня есть таблица фактов, которая отслеживает несколько действий и дат для определенной группы населения. Мне трудно создать запрос, который возвращает набор результатов, который я ожидал бы для этой таблицы. Вот образец этой таблицы:

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 зарегистрированными записями. Мне нужно знать, как написать запрос, который может рассчитать эти числа для конкретной даты, скажем, 20.04.2014. В тот день я хотел бы, чтобы запрос вернул 5 заявителей, 2 принятых и 0 зарегистрированных. Любая помощь будет оценена.

1 ответ

Глядя на ваши примеры данных, я не совсем уверен, каковы условия для группировки и подсчета записей на основе даты.

Это полный рабочий пример, показывающий, как вы можете добавить 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, И вы можете изменять условия по своему усмотрению.

Надеюсь, это поможет.

Другие вопросы по тегам