0

我有一个关于 SQL 2008 的问题,这可能很容易,但我现在看不到树木的树林。

我正在尝试生成一个基于 sql 的报告,详细说明过去六个月的帮助台问题统计信息,每个应用程序,每个办公室,每个月,然后我将其带入 ssrs 以应用漂亮:o)

无论如何-例如,我有我的脚本,可以按月计算;

SELECT      distinct t.name_1 'Application', 
           (select distinct name from location where location_ref = c.location_ref) as office,
           Count (t.name_1) as [Call Count], 
           datename(month, dateadd(month,-2,getdate()))+' '+datename(year, dateadd(month,-2,getdate())) as [Report Month]

FROM        call_logging C 
            Inner Join problem_type t On t.ref_composite = c.ref_composite 

AND         c.resolve_time between onvert(datetime,convert(varchar,month(dateadd(m,-2,getdate()))) + '/01/' + convert(varchar,year(dateadd(m,-2,getdate()))))
            and convert(datetime,convert(varchar,month(dateadd(m,-1,getdate()))) + '/01/' + convert(varchar,year(getdate()))) 
            and c.resolve_group in ('48', '60')

这又带回了 May 的所有问题。

问题是 t.name_1(问题所在的应用程序)是动态的,并且该列表每个月都会增长或缩小。

我基本上需要一个布局

申请办公室数 六月 五月 四月 三月 二月 一月

字伦敦 20 1 1 2 5 10 1

字巴黎 10 2 3 1 2 0 3

卓越马德里 05 0 0 3 2 0 0

等(如果这对这个布局有意义!)

我已经走上了 6 个单独的报告之路,但它在 ssrs 中看起来不太好。我考虑过#tmptables,但他们不喜欢插入不同的行。

4

1 回答 1

0
SELECT  [C].[name_1] AS [APPLICATION]
        ,COUNT([name_1]) AS [CALL COUNT]
        ,[l].[location_ref]
        ,[dbo].[ufn_GetDateTime_CalenderYearMonth]([resolve_time]) AS [StartCalenderYearMonth]
FROM  [call_logging] [C] INNER JOIN [problem_type] [t] 
                                    ON [t].[ref_composite] = [c].[ref_composite] 
                                    AND [c].[resolve_group] IN ('48', '60')
                         INNER JOIN [location] [l] ON [c].[location_ref] = [l].[location_ref]
WHERE [C].[resolve_time] BETWEEN '2011-01-01' AND GETDATE()
GROUP BY [C].[name_1], [l].[location_ref], [dbo].[ufn_GetDateTime_CalenderYearMonth]([resolve_time])

ufn_GetDateTime_CalenderYearMonth 的代码是:

CREATE FUNCTION [dbo].[ufn_GetDateTime_CalenderYearMonth] (@DateTime datetime)    
 RETURNS varchar(20)    
AS    
BEGIN    
 declare @dateString varchar(20)    
 declare @yearString varchar(10)    
 declare @monthString varchar(10)    

 set @yearString = cast( DATEPART(year, @DateTime) as varchar(10))    

 if(DATEPART(month, @DateTime) < 10)    
  set @monthString = '0' + cast( DATEPART(month, @DateTime) as varchar(5) )    
 else    
  set @monthString = cast( DATEPART(month, @DateTime) as varchar(5) )    

 set @dateString = @yearString + '-' +  @monthString    

 RETURN (@dateString)    

END

您只需将结果集拍成矩阵并按 [StartCalenderYearMonth] 对所有内容进行分组,它将显示从 2011 年 1 月 1 日到现在的每个月的数字。

于 2012-07-11T15:47:33.673 回答