在SQL Report Builder 2016中多条件连接assets与DepreciationInfo表
关联Assets与DepreciationInfo表的SQL查询方案(适用于SQL Report Builder 2016)
结合你给出的表结构和使用场景,我猜你是想基于资产ID关联两张表,获取完整的资产及对应折旧数据对吧?下面整理了几种适配SQL Report Builder 2016的实用查询方案:
1. 基础内关联查询(仅返回有对应折旧记录的资产)
如果只需要同时存在于两张表中的资产数据,用INNER JOIN就能精准匹配ID对应的记录:
SELECT a.ID, a.Name, a.Cost, a.Prior_Dep, a.Prior_Dep_Period, a.Use_Prior, d.EndDate, d.CurrentDepreciation, d.AccumulatedDepreciation, d.CarryingValue, d.Monthly FROM assets a INNER JOIN DepreciationInfo d ON a.ID = d.ID
这个查询会把两张表中ID完全匹配的记录关联起来,返回完整的资产信息和折旧明细。
2. 左关联查询(返回所有资产,无折旧记录则补全默认值)
如果需要保留assets表中所有资产(哪怕没有对应的折旧记录),LEFT JOIN是更合适的选择,同时用ISNULL处理空值让报表显示更友好:
SELECT a.ID, a.Name, a.Cost, a.Prior_Dep, a.Prior_Dep_Period, a.Use_Prior, ISNULL(CONVERT(VARCHAR(10), d.EndDate, 120), '无折旧记录') AS EndDate, ISNULL(d.CurrentDepreciation, 0) AS CurrentDepreciation, ISNULL(d.AccumulatedDepreciation, a.Prior_Dep) AS AccumulatedDepreciation, ISNULL(d.CarryingValue, a.Cost - a.Prior_Dep) AS CarryingValue, ISNULL(d.Monthly, '0/1') AS Monthly FROM assets a LEFT JOIN DepreciationInfo d ON a.ID = d.ID
这里针对无折旧记录的情况做了优化:比如累计折旧默认取前期折旧值,账面价值用原值减前期折旧计算,避免报表出现空白。
3. 适配Report Builder的小技巧
- 把上述查询保存为Report Builder的数据集后,直接拖拽字段就能快速搭建报表布局。
- 如果需要按时间筛选折旧数据(比如特定月份),可以在查询中添加
WHERE条件,例如筛选2020年4月的记录:WHERE CONVERT(VARCHAR(7), d.EndDate, 120) = '2020-04' - 对于
Use_Prior布尔字段,可在报表中设置显示规则,将True显示为“启用”,False显示为“未启用”,提升报表可读性。
内容的提问来源于stack exchange,提问作者Waseem
相关产品推荐
相关产品推荐

