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

1

文章分類: SQL Server, SQL語法

這是在做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資料列補上去,就算完成了

雖然可以解決問題,但其實不太滿意
因為要查詢的條件如果很複雜,又加上要算列數等於查詢兩次,而且是』幾乎』相同的語法重複出現,維護上也會比較困難
以自己這次的狀況來說,整個SQL下完竟然高達80行,當然這是為了讓可讀性比較高,但還是非常驚人
目前也想不到什麼其他更好的辦法了,網路上又找不到相關資料,有沒有高手願意提供更好的辦法呢?

Comments (1)

[...] 這跟前一篇[SQL][SQL Server]自動補足列數問題其實是同時發生的,因為報表的資料及是UNION好幾個資料表的 所以必須計算UNION後的資料列數,語法如下 ?View Code SQLSELECT SUM(num) as num FROM( SELECT COUNT(*) as num FROM tbl1 WHERE condition1='cond1' UNION SELECT COUNT(*) as num FROM tbl2 WHERE condition2='cond2' UNION SELECT COUNT(*) as num FROM tbl3 WHERE condition3='cond3' ) as rows) [...]

發表回應