这是我的这个。我假设你想要的大部分都是你在问题中包含的最后一个截图。
我拉下了你提供的RDL。感谢那!它可以使这种事情更容易。
报告中的SQL是模拟数据,这对我们正在尝试的内容很有帮助。我假设你从现在获取数据的存储过程给你类似的东西。我对将结果放入临时表中进行了处理,更改/整形数据,然后将其返回给报告。这就是我在这个答案中使用的机智。
以下是RDL中更新的SQL,为简洁起见,省略了几行。
SELECT *
INTO #Report
FROM (VALUES(1,4,1,1,10,20,30),
(1,4,1,2,11,20,30),
…
(22,666,7,14,23,150,6)
) AS t(A, B, C, D,E,F,G);
SELECT A.A, A.B, A.C, A.D, A.E -- selecting columns A thru E
FROM #Report A
UNION ALL
SELECT DISTINCT B.A, B.B, B.C, B.F, B.G -- union in columns F and G
FROM #Report B
ORDER BY 1, 2, 3
DROP TABLE #Report
所有这些的确是使用SELECT INTO
创建一个包含原始结果的临时表。然后,我将结果拆分出来,然后将所有的结果重新排列在一起,只有我需要的列彼此堆叠在一起;也使用DISTINCT
您想摆脱重复的位置。
要在您提供的RDL中使用此功能,您必须从Tablix中删除F和G列,并用此替换SQL。这就是Tablix在设计模式下的样子。
现在,你提到有,你不能改变一个存储过程。要将存储过程的结果存入临时表,您需要做2件事。
首先,根据过程的结果创建相同形状的临时表。这些表格并不一定是临时表格;你可以将它作为非临时表,并在稍后放置它。在临时表的情况下,DDL会是这个样子:
CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int)
然后插入存储过程的结果到该临时表。
INSERT INTO #Report
EXEC usp_MyStoredProcedure
没有,有没有简单的SELECT INTO
选项与存储过程中,如果你想知道。 人们希望有很多。
所以,如果这是您最终走向的方式,那么报告的SQL可能就是这样。
CREATE TABLE #Report (A int, B int, C int, D int, E int, F int, G int);
INSERT INTO #Report
EXEC usp_MyStoredProcedure;
SELECT A.A, A.B, A.C, A.D, A.E -- grabbing columns A thru E
FROM #Report A
UNION ALL
SELECT DISTINCT B.A, B.B, B.C, B.F, B.G -- union in columns F and G
FROM #Report B
ORDER BY 1, 2, 3
这是报告会看起来像在预览模式:
希望这有助于你出去。
你说你不能改变逻辑;你不能改变什么逻辑?你的手绑在哪里? –
@ R.Richards我的意思是我无法更改生成报告数据的数据库中的存储过程。我在我的问题中使用的报告只是我实际报告的简化版本。我试图将黄色背景部分作为子报告,它使用分组列的值作为子报告的参数。它实际上有效,但由于子报告将针对每个组执行,因此性能不可接受。 –
明白了。典型的,对吗?如何将当前存储过程的输出插入临时表中,然后在将数据输出到报表之前将其处理到需要的位置?可能?我已经做到了;我并不总是喜欢它,但它有效。 –