1. 程式人生 > >報表開發中通用group_concat函式的實現方法

報表開發中通用group_concat函式的實現方法

    使用Jasper或BIRT等報表工具時,常會碰到一些非常規的統計,用報表工具本身或SQL都難以處理,如在MSSQL/Oracle中,想展現類似group_concat函式計算結果的報表。

    集算器具有結構化強計算引擎,整合簡單,可以協助報表工具方便地實現此類需求。下面以MSSQL為例,來說明通用group_concat函式的實現過程。

    MSSQL的表Table1有四個欄位,欄位Col1、Col2、Col3是分組欄位,Col4是彙總欄位,部分資料如下:


    報表工具需要的資料來源如下:

    集算器程式碼:

    A1=mssqlDB.query("select * fromtable1 where Col1 in"+arg)

    這句程式碼執行SQL,從資料庫中取出資料。其中arg是來自報表的引數,比如(10,20)。A1的計算結果如下:

    A2=A1.group(Col1,Col2,Col3;~.(Col4)[email protected]():Col4)

    這句程式碼將A1按照Col1、Col2、Col3分組,並將每組資料中的Col4以逗號拼接在一起。程式碼中的~表示每組資料,比如第一組有三條記錄。~.(Col4)表示取出每組資料中的Col4欄位,比如第一組就是集合[A12G3 , K78DE , MAT12]。函式string可將集合中的成員拼接成一個字串,預設分隔符是逗號,選項@d表示不給成員加引號,因此表示式[A12G3 , K78DE , MAT12]

[email protected]()等於” A12G3 ,K78DE , MAT12”。表示式“:Col4”表示將前面的計算結果重新命名為Col4。

    A3就是本案例的最終計算結果,如下:

    A3:result A2

    這句程式碼將A2中的資料返回給報表工具。

    集算器對外提供JDBC介面,報表工具會將集算器識別為普通資料庫,整合方案請參考相關文件。

    接下來以JasperReport為例設計報表,表樣如下:

    預覽後可以看到報表結果:

    需要注意的是,報表呼叫集算器的方法和呼叫儲存過程一樣,比如將本指令碼儲存為group_concat.dfx,則在的JasperReport的SQL設計器中可以用group_concat $P{arg}

來呼叫。


相關推薦

報表開發通用group_concat函式實現方法

    使用Jasper或BIRT等報表工具時,常會碰到一些非常規的統計,用報表工具本身或SQL都難以處理,如在MSSQL/Oracle中,想展現類似group_concat函式計算結果的報表。     集算器具有結構化強計算引擎,整合簡單,可以協助報表工具方便地實現此類需

轉載----編寫高質量代碼:改善Java程序的151個建議(第1章:JAVA開發通用方法和準則___建議1~5)

ase 重載方法 name 原理 .get tin stat eas 容易 閱讀目錄 建議1:不要在常量和變量中出現易混淆的字母 建議2:莫讓常量蛻變成變量    建議3:三元操作符的類型務必一致   建議4:避免帶有變長參數的方法重載 建議5:別讓null值和空值威

01-第一章 Java開發通用方法和準則

建議1:不用在常量和變數中出現易混淆的字母      包括名全小寫,類名首字母全大寫,常量全部大寫並用下劃線分割,變數採用駝峰命名法(Camel Case)命名等。      例如: /** * 數字後跟小寫字母l的問題 */ public class Cl

編寫高質量程式碼:改善Java程式的151個建議(第1章:Java開發通用方法和準則___建議11~15)

    序列化Serializable是Java提供的通用資料儲存和讀取的介面。任何類只要實現了Serializable介面,就可以被儲存到檔案中,或者作為資料流通過網路傳送到別的地方。 package OSChina.Serializable; import java.io.

[iOS]怎樣在iOS開發切換顯示語言實現國際化

art out title oca standard 文件 creat mit 工具類 1.在Project設置,加入中英兩種語言:2.新建Localizable.strings文件,作為多語言相應的詞典,存儲多種語言,點擊右側Localization,勾選中英:3.加入

C#單例的實現方法

inter sed .html thumb otto pri www ati code 本文實例講述了C#中單例的實現方法。分享給大家供大家參考。具體實現方法如下: 代碼如下: #region “實現這個窗口類的單例,單例類常用於被主窗口以show()方法打開的窗口

JAVA的主函式main方法詳解

main方法詳解 主函式是靜態的 public static void main(String[] args){      } 主函式是什麼:主函式是一個特殊的函式,作為程式的入口,可以被jvm識別。 主函式的定義:   

Golang仿函式實現方法及效率測試

在C++ STL中,仿函式(functors)被大量用作改變演算法的內在行為。 由於Golang不支援泛型,所以沒法像C++那樣靈活的使用仿函式。但是Golang有interface,函式是”一等公民”(可賦值給指定型別變數),因此,在Golang中實際上也可以像仿函式那樣,通過具有相同引

MMVVC設計方法介紹:經典MVC設計模式在Cocoa-MVC的一種實現方法

MVC介紹 MVC在WEB開發中用於界定工作屬於Server端還是WEB前端還是十分清晰的。這也就是大家目前常見的MVC設計模式: View<===>Controller<===>Model 即Controller作為粘合劑分別於View和Model進行雙向通訊。

[JAVA]在Junit測試私有函式方法(junit, private, method)

轉自:https://blog.csdn.net/szwangdf/article/details/533452 eclipse中如何寫一個測試私有方法的junit? 假設類Summer定義如下: public class Summer{    private in

Android開發通用的流行框架

轉載地址:http://www.oschina.net/news/73836/15-android-general-popular-frameworks 1. 快取 DiskLruCache    Java實現基於LRU的磁碟快取 2.圖

STL的sort函式實現原理

STL的sort()演算法,資料量大時採用Quick Sort,分段遞迴排序。一旦分段後的資料量小於某個閾值,為避免Quick Sort的遞迴呼叫帶來過大的額外開銷,就改用Insertion Sort(插入排序)。如果遞迴層次過深,還會改用Heap Sort。 STL中的sort並非只是

Android移動開發通用技術整理

悲劇的住院了,閒來無聊。整理下以前做的幾個專案的寫下的筆記。 因為專案的通用性,以前老大給的建議是能做成類似於封裝完的jar包。 因為沒什麼時間,還有老大太高估我了 = =。 在此只是列一下幾個通用技術 通用技術一:App進入後的網路檢測。 程式碼很簡單 import a

開發web service的介面實現方法

一、WebService的開發手段   使用Java開發WebService時可以使用以下兩種開發手段     1、 使用JDK開發(1.6及以上版本)     2、使用CXF框架開發(工作中) 二、使用JDK開發WebService 2.1、開發WebServ

Swing, RAP(RCP), Android 程式開發,GUI重新整理實現方式對比

今天我們說一說基於Java語言的幾種GUI程式開發中,GUI重新整理實現方式的對比。 Swing,RAP(RCP也是一樣),Android其介面重新整理的原理都是一樣的:介面重新整理只有一個執行緒,我們稱其為UIThread,所有重新整理介面的操作(如更新進度條上的進度)都必須通過這個執行緒來操作,

ASP.NET開發主要的字元驗證方法-JS驗證、正則表示式、驗證控制元件、後臺驗證

在ASP.NET開發中主要的驗證方法收藏 <1>使用JS驗證 匹配中文字元的正則表示式: [\u4e00-\u9fa5] 匹配雙位元組字元(包括漢字在內):[^\x00-\xff] 備註:可以用來計算字串的長度(一個雙位元組字元長度計2,ASCII字元計1) 匹配空白行的正則表示式:\n\s

Mysql group_concat函式的使用及陷阱

group_concat函式 MySQL 中的group_concat 是字串連線函式,完整的語法如下: group_concat([DISTINCT] 要連線的欄位 [Order BY ASC/DESC 排序欄位] [Separator '分隔符']

利用MySQL 的GROUP_CONCAT函式實現聚合乘法

MySQL 聚合函式裡面提供了加,平均數,最小,最大等,但是沒有提供乘法,我們這裡來利用MYSQL現有的GROUP_CONCAT函式實現聚合乘法。先建立一張示例表:CREATE TABLE `tb_seq` ( `n

Android開發,dialog的實現方式

在Android開發中,我們經常會需要在Android介面上彈出一些對話方塊,比如詢問使用者或者讓使用者選擇。這些功能我們叫它Android Dialog對話方塊,在我們使用Android的過程中,我歸納了一下,Android Dialog的型別無非也就7種,下面我分別向

Android開發使用startActivityForResult()方法從Activity A跳轉Activity B出現B退出時A也同時退出的解決辦法

最近一個 App 中用到了 startActivityForResult() 方法,使用的時候卻出現了一些問題,比如我在 Activity A 中呼叫該方法向 Activity B 中跳轉,如果 B 中完成一系列操作之後用 setResult(resultcode, intent); f