0

我有两个表,数据如下:

            SELECT *
              FROM [dbo].[TestTable_1]
            ID  Value
            ----------
            1   gjha      
            2   dc        
            3   d         
            4   ds        
            5   dg        
            6   hn    

第二张表:

            SELECT *
              FROM [dbo].[TestTable_2]
            Value
            -----
            jklsa
            dfv
            b
            grt
            trj
            h
            muik
            rg
            kuu
            wd
            gb
            nm
            wef

我正在获取 SSRS 报告中的数据,如下所示:
在此处输入图像描述

问题是:

我怎样才能保持桌子大小相同?也就是说,如果 SSRS 报告中的小表有 6 条记录(在这种情况下),则较大的应该将大小调整为小,并且大表中的额外(/更多)记录应该向右移动。

这是 SSRS 的预期输出

            Value           Value
            --------  -----------------
            gjha      jklsa |muik | wef
            dc        dfv   |rg   |
            d         b     |kuu  |
            ds        grt   |wd   |
            dg        trj   |gb   |
            hn        h     |nm   |

注意:以上细节只是示例,然而,记录的数量是动态的。

4

2 回答 2

0

这不是一个完整的答案,因为它只是想到的并且完全未经测试。

首先是搜索SO寻找创建多列表的方法,已经有很多答案,所以我不会在这里详细解释。它们通常涉及将 RowNumber 添加到每一行,然后您可以使用它来计算矩阵行和矩阵列号,列号可以在矩阵中用作列组。(例如,如果行限制为 6,行号为 14,则最终行号为 2(14 mod 6 = 2),列号为 3,即 Floor(14/6)+1 = 3。

接下来,创建从每个表中获取最高行数的数据集。就像是

DECLARE @a int
DECLARE @b int
SELECT @a = COUNT(*) FROM myTableA
SELECT @b = COUNT(*) FROM myTableA

SELECT CASE WHEN @a<=@b THEN @a ELSE @b END AS maxRows

现在您有了最小表的大小,您可以将其作为参数传递给从两个表中获取实际数据的 proc(在上面的示例中为 6)

于 2019-05-27T22:41:22.093 回答
0

我刚刚在这里回答了一个类似的问题:https ://stackoverflow.com/a/56350614/2033717

您可以通过将3表达式替换为以下内容来调整此解决方案以适应您的情况:

=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))

换句话说,您正在确定需要多少列。然后将数据集的每一行分组为矩阵的行和列。如果您知道第二个表可以大于第一个表,这将起作用,但我不确定它是否会在没有表达式的一些附加条件的情况下双向工作。

于 2019-05-28T22:14:39.283 回答