【问题标题】:Returning multiple months of data into one select将多个月的数据返回到一个选择中
【发布时间】:2012-07-11 11:32:00
【问题描述】:

我有一个关于 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(问题所在的应用程序)是动态的,并且该列表每个月都会增加或减少。

我基本上需要一个布局

申请办公室计数 6 月 5 月 4 月 3 月 2 月 1 月

字伦敦 20 1 1 2 5 10 1

字巴黎 10 2 3 1 2 0 3

EXCEL 马德里 05 0 0 3 2 0 0

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

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

【问题讨论】:

    标签: select group-by report tmp


    【解决方案1】:
    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 日到现在的每个月的数字..

    【讨论】:

    • 谢谢 sc0rp - 我会试一试 :)
    猜你喜欢
    • 2011-07-30
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多