2016-12-22 2 views
0

У меня есть отчеты, которые группируют данные в день и месяц, чтобы делать сравнения года за годом. Он использует трюк, который я узнал на SO с SQL ниже, чтобы разделить между текущим и предыдущим.Непрерывная группировка столбцов в SSRS

select 
iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1) as [Row], 
CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) as [daymonth], 


    sum(iif([Type] in ('Normal operator call'),1,0)) as [Calls Answered], 
    sum(iif([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [Ring Offs] 

    From inboundcallsview 

    where 
    ([Start Time] between '2016-12-15' and '2016-12-22') 
    Or 
    ([Start Time] between '2015-12-15' and '2015-12-22') 

    group by 
iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1), 

CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) 

Когда я положил все это в SSRS, используя эту установку,

Setup

Я получаю этот результат, где 0 является в этом году и 1 в прошлом году

result1

Что хорошего, но я бы предпочел получить этот результат

resultwanted

Для того, чтобы люди могли легко сравнивать ответы с ответами и звонками с кольцевыми записями. Есть ли способ как в SQL, так и в отчете, настроенном на то, чтобы группировать столбцы под заголовками столбцов?

ответ

1

Ну запрос отправленный LONG не работает для меня (был запущен в течение 20 минут, прежде чем я прервать его), но он делал мне использовать мой мозг за один раз и мне точку в правильном направлении. То, что я сделал, это включить Роу различие непосредственно в каждый IIF заявление вместо того, что сидеть выше, так что SQL теперь

select 

CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) as [daymonth], 


    sum(iif(([Type] in ('Normal operator call'))and(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0),1,0)) as [Calls Answered This Year], 
    sum(iif(([Type] in ('Normal operator call'))and(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())<>0),1,0)) as [Calls Answered Last Year], 
    sum(iif(([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'))and(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0),1,0)) as [Ring Offs This Year], 
    sum(iif(([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'))and(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())<>0),1,0)) as [Ring Offs Last Year] 


    From inboundcallsview 

    where 
    ([Start Time] between '2016-12-15' and '2016-12-22') 
    Or 
    ([Start Time] between '2015-12-15' and '2015-12-22') 

    group by 

CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) 

order by CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) 

И я получил выход я хотел

output

Так спасибо ДЛИННО за то, что заставляют меня заниматься моим мозгом.

0

Вместо использования группы столбцов попробуйте этот запрос, просто используя таблицу.

Select A.daymonth,B.[Calls Answered],A.[Calls Answered],B.[Ring Offs],A.[Ring Offs] 

FROM 

(
select 
iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1) as [Row], 
CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) as [daymonth], 
sum(iif([Type] in ('Normal operator call'),1,0)) as [Calls Answered], 
sum(iif([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [Ring Offs] 

From inboundcallsview 

where 
    ([Start Time] between '2016-12-15' and '2016-12-22') 
group by iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1),CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) 
) as A 

LEFT JOIN 

(
select 
iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1) as [Row], 
CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) as [daymonth], 
sum(iif([Type] in ('Normal operator call'),1,0)) as [Calls Answered], 
sum(iif([Type] in ('Caller rang off','Caller rang off during divert','No suitable operator logged on'),1,0)) as [Ring Offs] 

From inboundcallsview 

where 
([Start Time] between '2015-12-15' and '2015-12-22') 
group by iif(DATEDIFF(yy,DATEADD(month, DATEDIFF(month, 0, [Start Time]), 0),GETDATE())=0,0,1),CONCAT(DATEPART(d,[start time]),'-',Datepart(m,[start time])) 
) as B 

ON B.daymonth = A.daymonth 

Where A.Row ! = B.Row 
+0

Этот запрос дает мне 8,5 миллионов строк. Неужели это не так? – tomdemaine

+0

Позвольте мне дважды проверить – LONG

+0

Я изменил запрос, попробуйте сейчас – LONG

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