2013-08-05 3 views
0

У меня есть запрос, который возвращает количество строк (различающееся имя child_) в течение одного месяца. Я хотел бы написать запрос, чтобы я мог вернуть итог в течение нескольких месяцев. Я хотел бы, чтобы быть в состоянии выбрать временной диапазон и иметь месяцы в диапазоне, я выбираю автоматический расчет без жесткого кодирования для каждого месяца. Я прочитал некоторую информацию о циклах и последовательностях, но мне было трудно понять.Ежемесячные подсчеты, определяемые временным диапазоном

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 

Любая обратная связь приветствуется!

+0

Не уверен, что если 'ufn_B2H_Enrolled_Clients_List (@From_DT, @From_DT)' должен быть 'ufn_B2H_Enrolled_Clients_List (@From_DT, @To_DT)' (обратите внимание на переход от '@ От_DT' до '@ To_DT') –

+0

@ Мартин Паркин Да, он должен быть от_DT до To_DT. Благодарю. – user2270911

+0

Каков максимальный временной интервал между '@ From_DT' и' @ To_DT'? Менее 1 года или более? Что делать, если некоторые пользователи выполняют эту хранимую процедуру с использованием следующих параметров: ''2012-01-01'' &'' 2013-0-30''? –

ответ

1

Я должен предположить, что один из столбцов в vw_B2H_CLIENTS - это дата, на которую вы фильтруете.

В этом случае, вы можете попробовать использовать DATEPART для того, чтобы сгруппировать в месяц (замена 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 
+0

Большое спасибо. Когда я запускаю это, я получаю ошибки: Msg 207, уровень 16, состояние 1, строка 8 Недопустимое имя столбца 'DATE_COL'. Msg 207, уровень 16, состояние 1, строка 4 Недопустимое имя столбца 'DATE_COL'. – user2270911

+0

Как я уже сказал, убедитесь, что вы: «замените DATE_COL на свой столбец даты». Поэтому вы должны использовать столбец даты, который вы фильтруете в таблице 'vw_B2H_CLIENTS' \ view, чтобы это работало. Есть два экземпляра DATE_COL для замены (один в 'SELECT' и один в' GROUP BY') - убедитесь, что вы получили оба. –