SSRS中的TSQL逻辑

时间:2013-06-22 08:50:19

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

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

因此,在DATE字段中,我需要根据报告运行的日期放置May 28Nov 28

什么是我需要编写的逻辑?

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

2 个答案:

答案 0 :(得分: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代码段

答案 1 :(得分:1)

如果你没有像我这样的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中进行文本格式化!返回datetime列并在报表本身中执行此操作。您需要在文本框上设置的格式是“dd MMM yyyy”(使用设计器时没有引号)。