【发布时间】:2021-03-13 11:35:27
【问题描述】:
我正在编写年初至今的总工资报告。 我想知道是否有办法将列与日期相关联。 我的想法是有人可以选择一个日期范围甚至一个结束月份,并且只返回该范围的 GROSWAGS_X。 (1 是 1 月,2 是 2 月,依此类推) 例如: 用户选择 2020 年 1 月 1 日作为开始日期,选择 2020 年 10 月 31 日作为结束日期。这将带来 GROSWAGS 1-10,但不包括 11 和 12。 要么 用户选择 2020 年 10 月。这将带回 1-10,不包括 11 和 12。 环境是MSSQL 2019,使用SSRS创建报表。 表格的示例格式如下。
EMPID GROSWAGS_1 GROSWAGS_2 GROSWAGS_3...
00001 2000.00 2000.00 2000.00
编辑:我能够通过在 SSRS 中添加一个计算列来获得所需的内容。像这样:
=IIf(Month(Parameters!EndDate.Value)=1,Fields!GROSWAGS_1.Value,
IIf(Month(Parameters!EndDate.Value)=2,Fields!GROSWAGS_1.Value+Fields!GROSWAGS_2.Value,
IIf(Month(Parameters!EndDate.Value)=3,Fields!GROSWAGS_1.Value+Fields!GROSWAGS_2.Value+Fields!GROSWAGS_3.Value,"error")))
【问题讨论】:
-
听起来你有设计缺陷。不应该有多个
GROSWAGS列,应该有一个,其中一个integer值作为数字,然后是另一列作为值。规范您的设计,您就没有问题。 -
正如其他人所说,这不是一个好的设计。您的基础数据实际上看起来像这样,还是这些数据是存储过程或视图的结果?如果您的基础数据实际上已标准化,请编辑您的问题并显示该结构的示例。如果它被规范化,那么构建查询将很简单。
-
@AlanSchofield 数据实际上是这样的。它让我感到惊讶,因为它是我们 Dynamics GP 数据库中的一个表。我无法更改此数据或表格,因为 GP 正在使用它。我想可以做一些 ETL,但对于我认为的单个报告来说,这是一个很好的工作量。
标签: sql tsql reporting-services