天天看點

iReport中交叉報表列頭的排序

近來做報表的時候,有個交叉報表讓列頭按照指定順序排序,自己糾結了好久也沒找出解決辦法,于是乎,本人就開始在網上“大肆”搜尋……,還好還好,雖然沒找到完整的解決辦法,但是通過“前人”們總結的點點滴滴,還是得到了點兒啟發,順理成章的呢,我就又“造”出了下面的這一篇……

本人之前寫過一篇有關用iReport制作檢查報表的例子,此處也就繼續那個例子開始往下說了哈!

1、  報表中通常我們的sql語句是這樣寫的:selects.student_name_,s.grade_,s.subject_name_ from student s,編譯,運作之後,我們會看到如圖1的結果,(注意:列頭的排序結果是數學、英語、國文)

iReport中交叉報表列頭的排序

圖1

但是若想讓列頭的排列順序是:國文、數學、英語,這要怎麼辦呢?可能有的人要說了,在sql語句中加個order by語句就ok了,嗯,的确哦,在資料庫中是可以的,或許碰巧在您的報表中也會就能得到您想要的結果,但那僅僅是“碰巧”哦,這裡我要向大家介紹的是另一種實作您的報表列頭排序的方法!

2、  在您的sql語句中動一下“手腳”,寫成這樣的:

select s.student_name_,s.grade_,

case to_char(s.subject_name_)

when to_char('國文') then to_char('A國文')

when to_char('數學') then to_char('B數學')

when to_char('英語') then to_char('C英語')

end as subject

from student s orderby s.subject_name_  desc,運作的結果如圖2所示:

iReport中交叉報表列頭的排序

圖2

3、  因為報表中顯示了多餘的字段,是以呢,我們就要想辦法把多出來的字元串去掉!如圖3點選Crosstab1到交叉報表的頁面,單擊顯示列标題的文本框,在窗體的右側就會顯示該文本框的屬性

iReport中交叉報表列頭的排序

圖3

4、  如圖4所示:在屬性視窗中找到TextField Expression屬性,點選最右邊的“…”按鈕

iReport中交叉報表列頭的排序

圖4

5、  如圖5.1所示,在黑色光标處寫函數substring,結果如圖5.2所示,然後單擊【确定】

iReport中交叉報表列頭的排序

圖5.1

iReport中交叉報表列頭的排序

圖5.2

6、  編譯,預覽的效果如圖6所示

iReport中交叉報表列頭的排序

圖6

至此,就實作了我們想要的功能了!還有一個小問題,不知您看出來沒有啦,就是:我添加了A、B、C後,報表就按照指定的順序出來了,其實呢,iReport是按照首個字元的ASCII碼來排序的呢,ok!就這樣了!