2015-05-11 3 views
-5

Я хотел бы рассчитывать количество дней рождения по кварталам в SQL Server т.е. в период с 1 января - 31 марта, 1 апреля - 30 июня, 1 июля - 30 Сен & Окт 1 - Декабрь 31.Даты по кварталам

Пожалуйста, помогите мне с функцией Date на Sql Server, чтобы сделать это.

Я передаю BDate как DATETIME. Я хочу использовать этот BDate для заполнения 4 полей типа int с подсчетом числа дней рождения в каждом квартале.

Спасибо.

+0

У вас есть поля даты, которые хранятся как 'VARCHAR' ...? – Siyual

+0

Поля даты хранятся как Int. – Sam

+0

См.: Http://stackoverflow.com/help/how-to-ask –

ответ

0

Пока ваша колонка «BDate» является даты и времени, вы можете добиться этого довольно легко с помощью этого запроса:

SELECT DATEPART(QUARTER,BDATE), COUNT(*) 
FROM TABLE1 
GROUP BY DATEPART(QUARTER,BDATE) 
ORDER BY DATEPART(QUARTER,BDATE) ASC 

Вот рабочую скрипку, используя некоторые случайные данные: http://sqlfiddle.com/#!6/7734b/1

0

Данные настройки:

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, затем это внешнее соединение с таблицей с датами рождения.

0

Пожалуйста, попробуйте следующее:

--replace '19000102' with your int column 
select SUM(CASE WHEN DATEPART(MONTH,CONVERT (datetime,convert(char(8),19000102)))  
    IN (1,2,3) 
    THEN 1 
ELSE 0 
END) as 'Q1', 
SUM(CASE WHEN DATEPART(MONTH,CONVERT (datetime,convert(char(8),19000102))) 
    IN (4,5,6) 
    THEN 1 
ELSE 0 
END) as 'Q2', 
SUM(CASE WHEN DATEPART(MONTH,CONVERT (datetime,convert(char(8),19000102))) 
    IN (7,8,9) 
    THEN 1 
ELSE 0 
END) as 'Q3', 
SUM(CASE WHEN DATEPART(MONTH,CONVERT (datetime,convert(char(8),19000102))) 
    IN (10,11,12) 
    THEN 1 
ELSE 0 
END) as 'Q4' 
Смежные вопросы