提问者:小点点

如何对SQL/SSRS报表中的某一行进行合并和居中?


我有一个表格如下:

我想合并和居中的S/No1.0和2.0只,并显示到SSRS报告,其余的行保持不变,有没有办法做到这一点?

结果将像下面的第二个图像。


共1个答案

匿名用户

方法1:不对DataSet进行真正的更改。

将带有标题的父行组添加到当前Tablix中。将分组设置为这样的表达式(假设s/no来自名为serialnumber的字段

=CINT(Fields.SerialNumber.Value)

在这里,我们只需将S/NO转换成一个整数,这样1.0和1.1都返回1

现在,每组行都有一个标题行。

可以合并标题行中的单元格,并将表达式设置为

=FIRST(Fields!Description.Value)

您可能必须强制数据集中的数据顺序,以确保1.0总是在1.1之前,等等。

方法2:将组名添加到数据集中

注意:这是为SQL Server编写的,而不是MySQL,但如果需要,应该很容易翻译

如果这不起作用,您可以将组标头添加到dataset查询的新列中,然后对其进行分组。数据集查询将如下所示...

(我复制了您的数据以显示其工作状态)

DECLARE @myTable TABLE (SerialNumber decimal (5,1), Description varchar(50), UOM varchar(50), rate decimal (10,2))
INSERT INTO @myTable VALUES
(1.0, 'Warehouse Charges', NULL, NULL),
(1.1, 'Storage in pallet', 'perpallet per month or part thereof', 15.84),
(2.0, 'Handling', NULL, NULL),
(2.1, 'Unstuffing - Palletised', 'per pallet', 5.00),
(2.2, 'De-palletised', 'per palett', 5.00)

SELECT * FROM @myTable

    SELECT 
        b.Description as GroupName, a.* 
        FROM @myTable a 
          JOIN (SELECT SerialNumber, Description FROM @myTable WHERE CAST(SerialNumber AS INT) = SerialNumber) b -- headers only
            ON CAST(a.SerialNumber AS INT) = b.SerialNumber 
        WHERE a.SerialNumber != b.SerialNumber

这将产生以下输出

所以现在您可以只对groupname字段进行分组,然后按照前面方法中所述进行合并。