Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выборка количества записей, несколько count-ов по условию  [new]
unid
Member

Откуда:
Сообщений: 22
Здравствуйте уважаемые участники форума.

Есть таблица

ФИО / Дата производства / Дата прихода

Иванов 02.01.17 04.02.18
Иванов 05.02.17 02.05.18
Сидоров 25.02.17 03.03.18
Петров 11.03.17 18.01.18
Сидоров 24.05.17 24.04.18

Запрос в конечным итоге должен выдать уникальные записи, в интервале даты производства с 01.01.17 по 31.06.17 и в интервале даты прихода с 01.01.18 - 31.01.18, 01.02.18 - 28.02.18, 01.03.18-31.03.18, 01.04.18-30.04.18, 01.05.18-31.05.18

Выходная таблица в виде
ФИО / Кол_во (дата прихода 01.01.18-31.01.18) / Кол_во (дата прихода 01.02.18-28.02.18) / Кол_во (дата прихода 01.03.18-31.03.18)

Не могу понять как реализовать несколько count ов с разными условиями в нескольких полях. Подскажите пожалуйста, пути решения.

Спасибо.
19 мар 18, 11:34    [21267166]     Ответить | Цитировать Сообщить модератору
 Re: Выборка количества записей, несколько count-ов по условию  [new]
Kopelly
Member

Откуда: Красноярск
Сообщений: 289
unid,

sum(case When [Дата прихода] between '2018-01-01' and '2018-01-31' Then 1 end) as Kol_201801
19 мар 18, 11:45    [21267214]     Ответить | Цитировать Сообщить модератору
 Re: Выборка количества записей, несколько count-ов по условию  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
unid,

по хорощему сгенерить таблицу месяцев с названиями и по ней разворачивать

DECLARE @T TABLE 
(
	Name	VARCHAR(255),
	F	Date,
	T	Date
)
INSERT INTO @t
VALUES
('Иванов'	,'02 jan 17', '04 feb 18'), 
('Иванов'	,'05 feb 17', '02 may 18'),
('Сидоров'	,'25 feb 17', '03 mar 18'),
('Петров'	,'11 mar 17', '18 jan 18'),
('Сидоров'	,'24 apr 17', '24 apr 18') 

SELECT 
	Name, 
	SUM(CASE WHEN T >= '01 jan 2018' AND T <= '31 jan 2018' THEN 1 ELSE 0 END ) as '01.01.18 - 31.01.2018',
	SUM(CASE WHEN T >= '01 feb 2018' AND T <= '28 feb 2018' THEN 1 ELSE 0 END ) as '01.02.18 - 31.02.2018'
FROM @t
GROUP BY Name
19 мар 18, 11:49    [21267232]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить