2011年7月6日 星期三

[SQL][SQL Server]自動補足空白列數

這是在做Reporting Service報表時遇到的問題,每頁要顯示60筆資料
不足60筆的時候必須補足空白資料行,也就是說如果只有58筆資料,就必須印2行空白列
同理如果有110筆資料,第一頁印滿60筆後,第二頁只有50筆,就要在印10行空白列
在網路上找了很久,就是找不到我要的答案,只好自己東湊西湊,總算是湊出來了
方法是用UNION ALL連接多個空行,讓資料行數補足成為60的倍數,至於差幾行可以補滿60倍數是用餘除的方法
語法大致如下,以下語法適用SQL SERVER

-- 第一段是主要的查詢結果
SELECT field1, field2, field3 FROM table1 WHERE field4 = 'value'
UNION ALL
-- 這段跟主要查詢與法相同,只是變成查詢總列數,接著餘除每頁筆數,且查出來的是空白列
SELECT TOP((SELECT COUNT(*) FROM table1 WHERE field4 = 'value') % 60) 
NULL, NULL, NULL
FROM table2
 
這樣就算完成了,原理是從某個一定大於每頁筆數的資料表撈出要補足的資料列,當然欄位都設定成NULL
再使用UNION ALL把所有NULL資料列補上去,就算完成了

1 則留言: