我有两个表,其数据如下:
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报表中的小表有6条记录(在这种情况下), 较大的记录应调整为与较小的记录相同的大小,大表中出现的多余(/更多)记录应向右移动。
这是SSRS的预期输出
Value Value
-------- -----------------
gjha jklsa |muik | wef
dc dfv |rg |
d b |kuu |
ds grt |wd |
dg trj |gb |
hn h |nm |
注意:上面的详细信息仅是示例,但是,记录的数量实际上是动态的。
答案 0 :(得分:0)
这不是一个完整的答案,因为这只是我想到的,并且还未经测试。
第一件事是在SO中搜索创建多列表的方法,已经有很多答案,因此在此不做详细解释。它们通常涉及在每行上添加RowNumber,然后可以使用它们来计算矩阵行和矩阵列号,该列号可以在矩阵中用作列组。 (例如,如果行限制为6,行号为14,则最终行号为2(14 mod 6 = 2),列号为3,即Floor(14/6)+1 = 3。 / p>
接下来,创建仅从每个表中获得最高行数的数据集。像
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)
答案 1 :(得分:0)
我刚刚在这里回答了类似的问题:https://stackoverflow.com/a/56350614/2033717
您可以通过将表达式中的3
替换为以下内容来使此解决方案适应您的情况:
=Floor(Count(Fields!ColumnName.Value, "Dataset1") / Count(Fields!ColumnName.Value, "Dataset1"))
换句话说,您正在确定需要多少列。然后将数据集的每一行分组为矩阵的行和列。如果您知道第二个表可以大于第一个表,那么这将起作用,但是我不确定在不对表达式附加一些条件的情况下它是否可以双向工作。