Non-Contiguous SSRS 中的列分组

Non-Contiguous column grouping in SSRS

我有一份报告,将数据按日和月分组,以便进行年比比较。它使用我在下面的 SQL 上学到的技巧来区分当前年份和之前的年份。

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 时,

我得到这个结果,其中 0 是今年,1 是去年

很好,但我更希望得到这个结果

以便人们可以更轻松地比较已回答与已回答以及响铃与响铃。有没有办法在 SQL 或报告设置中按原样在列 headers 下进行列分组?

不使用列组,而是使用 table.

尝试此查询
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

好吧,LONG 发布的查询对我不起作用(在我中止它之前 运行 持续了 20 分钟),但它确实让我动了脑筋一次,并为我指明了正确的方向。我所做的是将 Row 区别直接合并到每个 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]))

我得到了我想要的输出

所以感谢 LONG 让我动脑筋。