【问题标题】:TSQL Logic in SSRSSSRS 中的 SQL 逻辑
【发布时间】:2013-06-22 08:50:19
【问题描述】:

我正在构建一个标题字段为PropertyStatementForHalfyear Ending :<Date>的报告

所以在DATE 字段中,我需要根据报告的运行日期输入May 28Nov 28

我需要写什么逻辑??

  • 例如,如果我今天运行报告,即 6 月 22 日,我需要显示 PropertyStatementForHalfyear Ending : 28 Nov 2013
  • 如果我在2013年12月运行它,我需要显示PropertyStatementForHalfyear Ending : 28 May 2014

【问题讨论】:

    标签: sql-server tsql reporting-services report logic


    【解决方案1】:

    你可以这样使用:

    DECLARE @DateThreshold1 DATE = '20130528'
    DECLARE @DateThreshold2 DATE = '20131128'
    
    DECLARE @CurrentDate DATE = '20131201'
    
    IF @CurrentDate > @DateThreshold2
        SELECT CONVERT(VARCHAR(50), DATEADD(YEAR, 1, @DateThreshold1), 106)
    ELSE IF @CurrentDate > @DateThreshold1
        SELECT CONVERT(VARCHAR(50), @DateThreshold2, 106)
    ELSE
        SELECT CONVERT(VARCHAR(50), @DateThreshold1, 106)
    
    • 对于从2013010120130528 的日期,这将返回28 May 2013
    • 对于从2013052920131128 的日期,这将返回28 Nov 2013
    • 对于过去 20131128 的日期,这将返回 28 May 2014

    您可以轻松地将其打包成函数或 SSRS 代码 sn-p

    【讨论】:

    • 非常感谢!但同时你也可以给我代码,这样它就可以在任何给定的年份运行。不只是 2013 年和 2014 年。例如,如果我在 2019 年 12 月 1 日运行报告,它应该给我结果作为截至 2020 年 5 月 28 日的财政年度的 Prop 声明
    • @OneThinker:是的,可能需要你自己的一点努力才能让它完全发挥作用——我试图向你展示一个通用模板,如何在给定的年份做到这一点。留给读者(例如您)扩展它,以便它可以处理 any 年 ....
    【解决方案2】:

    如果你不喜欢 IF/CASE 语句,比如我:

    with dt as 
    (select CAST('2013-11-28' as datetime) dt) --dt becomes your datetime column.
    , ymdt as (select 
        DATEPART(year, dt) y,
        DATEPART(month, dt) m,
        DATEPART(day, dt) d,
        dt
        from dt) --split into year, month and date for readability
    select y, m, d, dt,
        DATEADD(month, 5 + d/28 - (m + d/28) % 6, --add months depending on month and day
        DATEADD(day, 28 - d --go to the correct day
        , dt) --start calculation from dt (the sql date functions' parameter order has always baffled me)
        ) HalfYearEndDate 
    from ymdt
    

    SQL 引擎将所有这些合并到一个大的常量扫描或日期时间列上的标量表达式中。

    如果您在其他报告中需要此功能,您应该为此创建一个 SQL 或 VB 函数,这样它就不会弄乱您的查询。

    另外:除非绝对必要,否则不要在 T-SQL 中进行文本格式化!返回一个日期时间列并在报告本身中执行此操作。您需要在文本框上设置的格式是“dd MMM yyyy”(使用设计器时不带引号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-29
      • 2021-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-19
      • 2016-10-01
      相关资源
      最近更新 更多