2016-02-12 20 views
3

我試圖減小數據的大小a T-SQL查詢返回到Reporting Services。例如,假設我們有如下行集:報告服務 - 如果當前爲NULL,則獲取以前的列值

ID Country City 
1 Germany Berlin 
2 Germany Berlin 
3 Germany Berlin 
4 Germany Berlin 
5 Germany Hamburg 
6 Germany Hamburg 
7 Germany Hamburg 
8 Germany Hamburg 
9 Germany Berlin 
10 Germany Berlin 

它可以很容易地轉換到這一點:

ID Country City 
1 Germany Berlin 
2 NULL NULL 
3 NULL NULL 
4 NULL NULL 
5 NULL Hamburg 
6 NULL NULL 
7 NULL NULL 
8 NULL NULL 
9 NULL Berlin 
10 NULL NULL 

正如我可能有幾千上萬的重複值(和幾百列) ,我知道使用這樣的NULLs來轉換數據會大大減少返回數據的大小。

是否有可能實現一個公式,如果當前行是NULL,那麼獲得上一行的列值?

我想測試只渲染大量數據或使用較小數據但應用此類表達式會更快。

+0

我認爲它不能通過使用內置函數的表達式來完成。它可以通過使用自定義代碼完成,但考慮到您有數百個列會影響處理時間。在縮短數據檢索時間的同時,增加處理時間。 –

回答

1

爲什麼不直接使用GROUP BY

SELECT Min(Id) as min, Max(ID) as max,Country,City 
FROM myTable 
GROUP BY Country,City 

或者

SELECT count(Id) as rowRepeatNum,Country,City 
FROM myTable 
GROUP BY Country,City 

第一種方法,如果你的IDS是連續的這個雖然我不知道如果ID是很重要的會工作。

第二種方法可以給你一個數字循環下來,以相當快的速度在你的應用程序中生成重複行並返回顯着更少的行。

可以給我更多關於您的用例的信息嗎?