Несколько дат в записи факта
У меня есть таблица фактов, которая отслеживает несколько действий и дат для определенной группы населения. Мне трудно создать запрос, который возвращает набор результатов, который я ожидал бы для этой таблицы. Вот образец этой таблицы:
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
, И вы можете изменять условия по своему усмотрению.
Надеюсь, это поможет.