【问题标题】:SSRS subtract a minus number from list in a sum columnSSRS 从总和列中的列表中减去一个负数
【发布时间】:2021-03-07 09:10:52
【问题描述】:
我有一个 SSRS 数据集查询,它在一列值上有一个 SUM,代表一个人缺勤的十进制时间,每次记录学生缺勤时,管理员都会输入该时间。在 uni 数据库中,工作人员似乎添加了缺勤记录,这些记录还显示了应该从记录中删除的小时数,他们只需在数字前面加上一个减号即可。是否可以让该列将减号识别为减法并将其从总数中删除?您可以在列表底部看到输入了 187.50 小时缺勤的记录,但随后为同一缺勤时间添加了另一条记录,指出应减去其中的 150.00 小时(他们以另一种方式弥补了安置时间的不足)。希望我已经解释了该查询,并附上了数据集查询的屏幕截图。我不确定我是否正确添加了屏幕截图。谢谢。
【问题讨论】:
标签:
sql
reporting-services
dataset
【解决方案1】:
我假设您希望看到最后两条记录显示为一条记录,最后一列中为 37.50?如果这是正确的,那么看起来您的分组太多了。
你似乎在分组
- sab_stuc - 好的
- sab_begd - 好的
- sab_endf - 好的
- enl_eltc - 不出现在输出中,可能可以从
GROUP BY 子句中删除
- enl_udfd - 不出现在输出中,可能可以从
GROUP BY 子句中删除
- enl_ufdb - 求和的值因此应从
GROUP BY 子句中删除
如果您从 group by 子句中删除 3 列,则总和应该“正常工作”。
还有一件事...尝试为表名起别名,这将使您的 SQL 更易于阅读。
类似
SELECT
dbo.TableA.columnA, dbo.TableB.columnB
FROM dbo.TableA
JOIN dbo.TableB on dbo.TableA.myKeyColumn = dbo.TableB.myKeyColumn
ORDER BY dbo.TableA.columnA
使用别名看起来像这样
SELECT
a.columnA, b.columnB
FROM dbo.TableA a
JOIN dbo.TableB b on a.myKeyColumn = b.myKeyColumn
ORDER BY a.columnA
【解决方案2】:
我认为您可以添加一个 CASE 语句来检查 SUM 中的减号,如果它是负数则使用 0。
CAST(dbo.srs_enl.enl_udfb AS DECIMAL(27, 2))
会变成
CAST(CASE WHEN LEFT(dbo.srs_enl.enl_udfb, 1) = '-' THEN 0 ELSE dbo.srs_enl.enl_udfb END AS DECIMAL(27, 2))
或者您可以使用布尔逻辑,如果值小于 0,则将值乘以 0:
CAST(dbo.srs_enl.enl_udfb AS DECIMAL(27, 2)) * CASE WHEN CAST(dbo.srs_enl.enl_udfb AS INT) < 0 THEN 0 ELSE 1 END