Данные настройки:
create table test (
d1 varchar(10),
d2 datetime
);
insert into test (d1,d2) values ('2015-01-28','2015-01-28');
insert into test (d1,d2) values ('2015-02-13','2015-02-13');
insert into test (d1,d2) values ('2015-07-19','2015-07-19');
insert into test (d1,d2) values ('2015-11-04','2015-11-04');
Если вы просто хотите, чтобы получить отсчеты для каждого из кварталов, присутствующих в ваших данных:
select DATEPART(QUARTER, d2), count(*)
from test
group by DATEPART(QUARTER, d2);
Вы можете использовать d1 или d2 (SQL Server будет обрабатывать varchar или datetime должным образом).
Если вы хотите включить все четыре четверти, даже если они не присутствуют в ваших данных:
select qs.q, count(t.d2) as c
from (
SELECT 1 as q
UNION ALL
SELECT 2 as q
UNION ALL
SELECT 3 as q
UNION ALL
SELECT 4 as q) qs
left join test t
on qs.q = DATEPART(QUARTER, t.d2)
group by qs.q;
Опять же, вы можете использовать либо d1 или d2, это не имеет значения. Запрос «qs» просто получает числа от 1 до 4, затем это внешнее соединение с таблицей с датами рождения.
У вас есть поля даты, которые хранятся как 'VARCHAR' ...? – Siyual
Поля даты хранятся как Int. – Sam
См.: Http://stackoverflow.com/help/how-to-ask –