根据当前周,过去几周和未来几周的字段中的日期过滤列

时间:2013-01-24 10:28:31

标签: sql-server datetime reporting-services reportbuilder3.0

示例表:

列标题)所有人的总面试---(行标题)要求采访

列标题)本周的访谈次数 - (行值)计算本周安排的所有日期,其状态为:“采访请求”,例如4

列标题)下周的采访次数 - (行值)计算下周安排的所有状态:“采访请求”,例如6

首先,我想对我的临时桌子进行宣传,似乎我不能使用图片,因为我是新成员。

我也是使用reportbuilder和sql的新手,并且一直试图弄清楚如何计算报告中某些日期范围之间的日期数量。

就像我在临时字段中所说的“本周采访次数”一样,我希望根据日期字段计算本周,之后一周,前一周等的所有日期。然后我计划打破这张桌子,以显示一个人的所有访谈。

我遇到的问题是,会有很多日期跨越不同的月/日。所以我不确定我如何使用DateDiff或其他日期功能来表示这一点,因为该表旨在成为当前访谈的实时表示。

我正在尝试使用报告生成器做什么?如果有的话,任何提示都会很棒,如果没有,那么感谢您花时间看我的问题。

作为请求的数据集字段:

[UserName](用户表),[InterviewStatus](访谈表),[DateUpdated](访谈表)

这些是将在报告中使用的主要内容

2 个答案:

答案 0 :(得分:1)

如果您只想计算每个字段的列数,可以使用sql语句COUNT(),请参阅COUNT()

您可以执行以下常见查询:

SELECT COUNT(fieldName1), COUNT(fieldName2), ... , COUNT(fieldNamen) FROM <tableName>

同时尝试显示您的代码,以便更明确您的问题。

答案 1 :(得分:0)

您可以使用where子句中的面试表过滤中的泛型select语句,了解当前周开始到下一周结束之间的日期。

如果日期属于当前一周或下一个日期,则两个字段的总和为1。

修改 以下示例将给出本周内的日期数。取自another question

Select InterviewStatus,
       Sum(Case when DateUpdated >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE())
                     AND DateUpdated < CAST(CONVERT(VARCHAR(10), DATEADD(dd, (8 - DATEPART(dw, GETDATE())), GETDATE()), 120) AS DATETIME)
                Then 1
                Else 0 end) 
          as NumberInCurrentWeek
From InterviewTable
Where DateUpdated >= DATEADD(dd, -(DATEPART(dw, GETDATE()) -1), GETDATE())
      AND DateUpdated < CAST(CONVERT(VARCHAR(10), DATEADD(dd, (8 - DATEPART(dw, GETDATE())), GETDATE()), 120) AS DATETIME)
Group by InterviewStatus

这只需要根据您的具体情况进行调整。例如,改变8乘7将捕获当前的两周。

然后根据查询生成一个简单的表。