【问题标题】:How to group records by different date range in SQL?如何在 SQL 中按不同日期范围对记录进行分组?
【发布时间】:2013-11-09 23:56:50
【问题描述】:

使用 SSRS 2008,我需要按 25 天的销售额分组,并需要在折线图中反映相同的情况。以便 X 轴包含日期差异,例如。 1 月 13 日 1 日至 25 日,13 年 1 月 26 日至 2 月 19 日,依此类推,直到标量 @endate...,y 轴代表实现的对应销售额。我已经按周和月分组并意识到这一点,但是当它相差 25 天时,我有点困惑。对此的任何提示将不胜感激。谢谢。

【问题讨论】:

    标签: ssrs-2008 reporting-services


    【解决方案1】:

    为了在报告级别执行此操作,您可以创建一个计算列来对各个日期进行分组。我使用了以下表达式:

    =DateAdd(DateInterval.Day
      , 25 * Floor
        (
          (DateDiff(DateInterval.Day, CDate("01-Jan-2013"), Fields!date.Value)
          / 25)
        )
      , CDate("01-Jan-2013"))
    

    基本上,它计算自年初以来每个日期的天数,将其除以 25 并向下取整,然后使用这个新数字计算该期间的开始日期。

    我已经硬编码了年初日期,但您可以轻松地基于此参数或表达式。

    这给出了一些样本数据的以下结果:

    您可以看到他们的分组日期值符合预期。基于此,您也可以在图表中轻松地将它们组合在一起。

    评论后编辑

    也许你可以仔细检查你的表情?我认为在数据集中设置计算字段比直接在图表中设置更容易 - 然后很容易将结果放在表格中以查看一切是否正常。我根据相同的表达式扩展了上面的示例。我添加了另外两个计算字段,一个用于组结束日期:

    =DateAdd(DateInterval.Day, 24, Fields!groupDate.Value)
    

    还有一个可以创建格式良好的组标签:

    =Format(Fields!groupDate.Value, "dd-MMM")
      & " - "
      & Format(Fields!groupDateEnd.Value, "dd-MMM")
    

    基于这些,我添加了一个包含以下类别/系列的图表:

    最终结果,按要求分组:

    或者,您也可以在数据库级别执行此操作,假设那是您的数据源;只需将分组表达式更改为等效的 T-SQL:

    with groupDates as
    (
      select *
        , groupDate = dateadd(dd, 25 * (datediff(dd, '01-jan-2013', date) / 25), '01-jan-2013')
      from departments
    )
    select department
      , groupDate
      , groupDateEnd = dateadd(dd, 24, groupDate)
      , groupValue = sum(value)
    from groupDates
    group by department
      , groupDate
    order by department
    

    SQL Fiddle with demo.

    【讨论】:

    • 您好伊恩,感谢您的回复。解释很清楚,但它不起作用。我在 Category 组中的 SUM VALUES 及以上表达式下添加了销售额,图表中没有任何显示。除了添加表达式,是否可以在数据集中编写查询? PS - 我在这里按部门分组,我的参数是开始日期、结束日期和部门。希望我清楚。提前致谢。
    • 也许你可以再检查一下你的表情?我添加了更多详细信息,显示了报告中的分组工作。如果它不适合您,我建议将分组创建为计算字段,在表格中显示数据,并查看这是否表明出了什么问题。或者,如果您想在数据库级别进行分组,我创建了一个示例查询。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多