sql-server - SSRS 中的动态列依赖于 SQL Server 中的数据?
问题描述
我有两个表如下。
Vehicle Brand Acquired Year
A001 Toyota 2018
A002 BMW 2019
A003 Honda 2019
Vehicle Maintenance Year Maintenance Cost
A001 2018 5000
A001 2019 7000
A001 2020 3000
A002 2020 8000
A003 2019 3000
A003 2020 2000
我想要这样的报告:
Vehicle Brand Acquired Year 2018 2019 2020
A001 Toyota 2018 5000 7000 3000
A002 BMW 2019 0 0 8000
A003 Honda 2019 0 3000 2000
其中前三列之后的列是动态的,取决于表 2 中的维护年份。这些列的数据是相应维护年份的维护成本。
有人可以提供一些指导吗?
解决方案
我使用以下数据集查询重新创建了您的示例数据。
DECLARE @v TABLE(Vehicle varchar(10), Brand varchar(10), [Acquired Year] int)
DECLARE @m TABLE(Vehicle varchar(10), [Maintainence Year] int, [Maintainence Cost] int)
INSERT INTO @v VALUES
('A001', 'Toyota', 2018),
('A002', 'BMW', 2019),
('A003', 'Honda', 2019)
INSERT INTO @m VALUES
('A001', 2018, 5000),
('A001', 2019, 7000),
('A001', 2020, 3000),
('A002', 2020, 8000),
('A003', 2019, 3000),
('A003', 2020, 2000)
SELECT
v.Vehicle, v.Brand, v.[Acquired Year], m.[Maintainence Year], m.[Maintainence Cost]
FROM @v v
JOIN @m m on v.Vehicle = m.Vehicle
这给了我们总共 6 行数据集的输出看起来像这样..
Vehicle Brand Acquired Year Maintainence Year Maintainence Cost
A001 Toyota 2018 2018 5000
A001 Toyota 2018 2019 7000
A001 Toyota 2018 2020 3000
A002 BMW 2019 2020 8000
A003 Honda 2019 2019 3000
A003 Honda 2019 2020 2000
注意:我们不需要在这里做任何动态的事情,如果年数增加,报告的矩阵控制将为我们做这件事,所以报告中的列数不需要我们做任何事情。
创建一个新报告。添加一个新数据集并将数据集查询设置为上面的脚本或为您提供与实际数据相同的结果布局的东西。
然后将矩阵控件添加到您的报告中
- 将车辆从数据集字段列表拖到“行”占位符
- 将 Maintenance_Year 拖到“列”占位符
- 将 Maintenance_Cost 拖到“数据”占位符
- 接下来,右键单击车辆文本框并选择“插入列 => 内部组 - 右”,然后单击新单元格并从列表中选择“品牌”
- 重复获得年份。当您这样做时,由于 Year 是数字,SSRS 将添加一个 SUM 表达式,您需要更改它。右键单击表达式并将其更改为
=SUM(Fields!Acquired_Year.Value)
至
=FIRST(Fields!Acquired_Year.Value)
最终的设计应该是这样的。
当我们运行报告时,我们得到了这个。
推荐阅读
- angular - 更新后 Angular 8 订阅触发
- java - 不使用框架管理 DI 对象
- vfs - 如何在块设备层考虑 VFS 操作?
- angular - Angular:如何用实时 api 替换硬编码对象?
- c# - 为什么 AES 加密的结果在使用 C# 和使用 OpenSSL C++ 之间存在巨大差异?
- javascript - peer-peer 没有在所有浏览器中使用 peerJS 连接
- c++ - 如何阻止英特尔 icpc 抱怨对 basic_string 的未定义引用?
- python-3.x - Python3子进程:获取8位以上的进程返回码
- android - 使用超过 25 个航点/坐标的 MapBox 绘制路线/折线
- git - 为什么 Git 子树一遍又一遍地处理相同的提交?