統(tǒng)計(jì)圖表FineReport之SQL函數(shù)
有的時(shí)候希望某個(gè)單元格能夠直接獲取到數(shù)據(jù)庫(kù)中的某個(gè)值,而不是先要定義一個(gè)數(shù)據(jù)集后,再去取數(shù)據(jù)。這時(shí)就可以用函數(shù)Sql()公式,下面講解下其用法。
1. 公式解釋
SQL(connectionName,sql,columnIndex,rowIndex):返回的數(shù)據(jù)是從connectionName數(shù)據(jù)庫(kù)中獲取的sql語(yǔ)句的表中的第columnIndex列第rowIndex行所對(duì)應(yīng)的元素。
connectionName:數(shù)據(jù)庫(kù)名,字符串形式,需要用引號(hào)如"FRDemo";
sql:SQL語(yǔ)句,字符串形式;
columnIndex:列序號(hào),整型;
rowIndex:行序號(hào),整型。
備注:行序號(hào)可以不寫(xiě),這樣返回值為數(shù)據(jù)列。
2. 以我們提供的數(shù)據(jù)源FRDemo為例
2.1 示例(就一般的只獲取某個(gè)字段內(nèi)容)
從表 STSCORE中,我們可看到第3行第3列的值為Alex,如下:
現(xiàn)在若要直接在報(bào)表的單元格中顯示數(shù)據(jù)值:Alex,而不通過(guò)先定義一個(gè)數(shù)據(jù)集后,再去取數(shù)據(jù)的方式,這里就可以使用sql()公式,此時(shí)只需在單元格中輸入:=sql("FRDemo","SELECT * FROM STSCORE",3,3)即可,預(yù)覽就可看到Alex值。
2.2 示例(帶有參數(shù)時(shí)公式的使用)
帶有參數(shù)形式的時(shí)候,直接在報(bào)表的單元格中獲取數(shù)據(jù)值,寫(xiě)法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3)
顯示效果(班級(jí)為Class1的第3列所有值),如下:
若需要顯示某個(gè)具體值,如:顯示 Jonny 的效果(即班級(jí)為Class1的第3列第4行的值),寫(xiě)法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = 'Class1' ",3,4)
若參數(shù)值為變量如為報(bào)表參數(shù)或者是某個(gè)單元格,則寫(xiě)法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$class+"' ",3,4)
或
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+A1+"' ",3,4)
如果傳遞的參數(shù)是獲取當(dāng)前單元格的值,即用$$$作為參數(shù)時(shí),字符串類(lèi)型同樣需要拼接單引號(hào),如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO = '"+$$$+"' ",3,4)
注:如果參數(shù)或者單元格值有多個(gè),那么sql函數(shù)的寫(xiě)法如下:
=sql("FRDemo","SELECT * FROM STSCORE where CLASSNO in ('"+$class+"') ",3,4)
并且class參數(shù)返回值的分隔符需為',',具體請(qǐng)查看下拉復(fù)選框參數(shù)聯(lián)動(dòng)。
了解Java報(bào)表工具就從這里開(kāi)始