Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server SSRS中的动态列取决于SQL Server中的数据?_Sql Server_Visual Studio_Reporting Services - Fatal编程技术网

Sql server SSRS中的动态列取决于SQL Server中的数据?

Sql server SSRS中的动态列取决于SQL Server中的数据?,sql-server,visual-studio,reporting-services,Sql Server,Visual Studio,Reporting Services,我有两张桌子,如下所示 Vehicle Brand Acquired Year A001 Toyota 2018 A002 BMW 2019 A003 Honda 2019 Vehicle Maintenance Year Maintenance Cost A001 2018 5000 A001 2019

我有两张桌子,如下所示

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
注意:我们不需要在这里做任何动态的事情,如果年数增加,报告的矩阵控制将为我们做到这一点,因此报告中的列数不需要我们做任何事情

创建新报告。 添加一个新的数据集,并将数据集查询设置为上面的脚本或提供与实际数据相同的结果布局的内容

然后在报告中添加矩阵控件

将车辆从数据集字段列表拖动到“行”占位符 将维护年份拖到“列”占位符 将维护成本拖到“数据”占位符 接下来,右键单击车辆文本框并选择Insert column=>Inside Group-right,然后单击新单元格并从列表中选择“Brand” 每年重复一次。当您这样做时,由于年份是数字,SSRS将添加一个求和表达式,您需要对此进行更改。在表达式上单击鼠标右键,然后将其从 =萨姆菲尔德!获得的年价值 到 =第一场!获得的年价值

最终的设计应该是这样的

当我们运行报告时,我们得到了这个


SSRS为您提供了一个解决方案。@DaleK我已经读过了。顺便说一句,对于我的报告,我需要为矩阵设置一行吗?我不知道设置一行是什么意思,但您将按车辆、品牌和购买年份对行进行分组。然后按维护年/维护成本创建列。您不需要在SQL中创建列,SSRS矩阵将为您提供Google SSRS矩阵教程