2015-03-10 1 views
1

Как сгруппировать данные по другой дате в sql?Как сгруппировать данные по разным датам в sql?

Например, я хочу, чтобы данные были сгруппированы из 1/2/2015 в 6/2/2015, 7/2/2015 к 12/2/2015 и т.д. До сих пор я только мог сгруппировать их в соответствии с 1 по диапазону дат с использованием WHERE условие.

SELECT type, count(*) 
from table1 
WHERE Day(datefield) <=6 
Group by type 

table1:

типа, DateField

TypeA, '2015-2-1'

TypeB, '2015-2-2'

TypeB, «2015 -2-9 '

типA,' 2015-2-18 '

TypeB, '2015-2-28'

желаемого результата:

типа, нет. за день 1-6, нет. на день 7-12, нет. на 13-18 день, №. на 19-24 день, нет. за день 25-31

типа А, 1, 0, 1, 0, 0

типа В, 1, 1, 0, 0, 1

+1

Вы можете добавить некоторые примеры данных и желаемый результат –

+0

Вы, возможно, потребуетесь использовать функцию кадрирования, как NTILE: https://msdn.microsoft.com/en-us/library/ms175126.aspx –

+0

Но как @NoDisplayName сказал, что некоторые примеры данных и ожидаемый результат помогут сделать это определение ... –

ответ

0

Сначала нужно создать производную таблицу, где каждый DateField является заменяется меткой ('1-6', '7-12' и т. д.). Затем группируйте этот стол по его метке и введите и получите подсчеты. Наконец, поверните метки в столбцы , используя условную агрегацию (max(case when ...).

select type, 
    max(case when date_label = '1-6' then date_count end) '1-6', 
    max(case when date_label = '7-12' then date_count end) '7-12', 
    max(case when date_label = '13-18' then date_count end) '13-18', 
    max(case when date_label = '19-24' then date_count end) '19-24', 
    max(case when date_label = '25-31' then date_count end) '25-31', 
from (
    select 
     type, 
     date_label, 
     count(*) date_count 
    from 
     (select type, 
     case when day(datefield) <=6 then '1-6' 
     when day(datefield) <= 12 then '7-12' 
     when day(datefield) <= 18 then '13-18' 
     when day(datefield) <= 24 then '19-24' 
     when day(datefield) <= 31 then '25-31' 
     else 'n/a' end as date_label 
     from table1) t1 
    group by type, date_label 
) t1 group by type 

 Смежные вопросы

  • Нет связанных вопросов^_^