2016-12-22 7 views
0

年次比較を行うためにデータを日と月にグループ化するレポートがあります。それは私がSOに学んだトリックを使用して、下のSQLを使って、今年と前の間に分割します。私は0は今年1である。この結果は、SSRSの非連続列グループ

result1

昨年になってしまう私は、このセットアップを使用して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])) 

Setup

これは問題ありませんが、私はこの結果を得ることを好むでしょう。

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

このクエリは、私に850万行を返します。確かにそれは正しいことができないのですか? – tomdemaine

+0

私はダブルチェックをさせてください – LONG

+0

私は、クエリを変更しました今すぐ – LONG

関連する問題