這是我的這個。我假設你想要的大部分都是你在問題中包含的最後一個截圖。
我拉下了你提供的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我的意思是我無法更改生成報告數據的數據庫中的存儲過程。我在我的問題中使用的報告只是我實際報告的簡化版本。我試圖將黃色背景部分作爲子報告,它使用分組列的值作爲子報告的參數。它實際上有效,但由於子報告將針對每個組執行,因此性能不可接受。 –
明白了。典型的,對嗎?如何將當前存儲過程的輸出插入臨時表中,然後在將數據輸出到報表之前將其處理到需要的位置?可能?我已經做到了;我並不總是喜歡它,但它有效。 –