René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Jasper - Groups

First example

Demonstration of the agregate function sum(...).
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport 
  xmlns="http://jasperreports.sourceforge.net/jasperreports" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
  name         =     "groups" 
  pageWidth    =        "595" 
  pageHeight   =        "845"
  columnWidth  =        "595" 
  leftMargin   =          "0" 
  rightMargin  =          "0" 
  topMargin    =          "0" 
  bottomMargin =          "0"
>
	<queryString language="SQL">
		<![CDATA[
    
select
  SUM(VAL),
  client
    from (
      select     1  val, 'Small Joe'   client  from dual union all
      select     3  val, 'Small Joe'   client  from dual union all
      select     2  val, 'Small Joe'   client  from dual union all
      select     4  val, 'Small Joe'   client  from dual union all
      select  2301  val, 'Big Inc'     client  from dual union all
      select   895  val, 'Big Inc'     client  from dual union all
      select  3333  val, 'Big Inc'     client  from dual
      ) foo_bar
group by 
  client
  ]]>
	</queryString>

	<field name="SUM(VAL)" class="java.math.BigDecimal"> <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="CLIENT"   class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>

	<group name="CLIENT">
		<groupExpression><![CDATA[$F{CLIENT}]]></groupExpression>
		<groupHeader>
			<band height="13" splitType="Stretch">
				<staticText> <reportElement x=  "0" y="0" width="139" height="13" /> <text><![CDATA[Client:]]></text> </staticText>
				<textField>  <reportElement x="139" y="0" width="416" height="13" /> <textFieldExpression class="java.lang.String"><![CDATA[$F{CLIENT}]]></textFieldExpression> </textField>
			</band>
		</groupHeader>
		<groupFooter> <band height="8" splitType="Stretch"> </band> </groupFooter>
	</group>

	<title> </title>

	<detail>
		<band height="20" splitType="Stretch">
			<staticText><reportElement x=  "0" y="0" width="139" height="20"/> <textElement> </textElement> <text><![CDATA[Val per Client:]]></text> </staticText> 
      <textField> <reportElement x="139" y="0" width="416" height="20"/> <textElement> </textElement> <textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{SUM(VAL)}]]></textFieldExpression> </textField>
		</band>
	</detail>

	<pageFooter> </pageFooter>

	<summary> </summary>
</jasperReport>

Second example

A bit more elaborate use of the <groupHeader> and <groupFooter> tags.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport 
  xmlns="http://jasperreports.sourceforge.net/jasperreports" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
  name         ="report name" 
  pageWidth    =        "595" 
  pageHeight   =        "845"
  columnWidth  =        "595" 
  leftMargin   =          "0" 
  rightMargin  =          "0" 
  topMargin    =          "0" 
  bottomMargin =          "0"
>

	<queryString language="SQL">
		<![CDATA[select
  count(1),
  sum(val),
  itm,
  city,
  clnt
from (
--
      select     1  val, 'Boston'  city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
      select     3  val, 'Boston'  city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
      select     2  val, 'Boston'  city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
      select     4  val, 'Boston'  city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
--
      select     8  val, 'Chigaco' city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
      select    12  val, 'Chigaco' city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
--
      select    22  val, 'Houston' city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
      select    19  val, 'Houston' city, 'Apple' itm, 'Small Joe'   clnt  from dual union all
--
      -----
--
      select     4  val, 'Boston'  city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
      select     6  val, 'Boston'  city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
      select     2  val, 'Boston'  city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
--
      select    18  val, 'Chigaco' city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
      select    22  val, 'Chigaco' city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
--
      select    50  val, 'Houston' city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
      select    26  val, 'Houston' city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
      select    24  val, 'Houston' city, 'Lemon' itm, 'Small Joe'   clnt  from dual union all
--
      ----
      ----
--
      select  2301  val, 'Boston'  city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
      select   895  val, 'Boston'  city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
      select  3333  val, 'Boston'  city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
--
      select  5001  val, 'Chigaco' city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
      select  4999  val, 'Chigaco' city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
      select  5005  val, 'Chigaco' city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
      select  4995  val, 'Chigaco' city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
--
      select 10000  val, 'Houston' city, 'Apple' itm, 'Big Inc'     clnt  from dual union all
--
      ----
--
      select  2002  val, 'Boston'  city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1001  val, 'Boston'  city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1441  val, 'Boston'  city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  5001  val, 'Chigaco' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select  4999  val, 'Chigaco' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select  5005  val, 'Chigaco' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select  4995  val, 'Chigaco' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  1010  val, 'Houston' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
      select 10101  val, 'Houston' city, 'Lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  8000  val, 'Houston' city, 'Pear'  itm, 'Big Inc'     clnt  from dual union all
      select  1111  val, 'Houston' city, 'Pear'  itm, 'Big Inc'     clnt  from dual union all
      select   888  val, 'Houston' city, 'Pear'  itm, 'Big Inc'     clnt  from dual 
--
      ) 
--
    foo_bar
group by 
  clnt,
  city,
  itm
order by 
  clnt,
  city,
  itm]]>
	</queryString>

	<field name="COUNT(1)" class="java.math.BigDecimal"> <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="SUM(VAL)" class="java.math.BigDecimal"> <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="ITM"      class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="CITY"     class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="CLNT"     class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>

	<group name="CLNT"> <groupExpression><![CDATA[$F{CLNT}]]></groupExpression>

		<groupHeader>
			<band height="27" splitType="Stretch">
				<staticText>
					<reportElement x="0" y="0" width="200" height="27" />
					<text><![CDATA[Group header for clnt]]></text>
				</staticText>
				<textField>
					<reportElement x="139" y="0" width="416" height="27"/>
					<textFieldExpression class="java.lang.String"><![CDATA[$F{CLNT}]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>

		<groupFooter>
			<band height="20" splitType="Stretch">
				<staticText>
					<reportElement x="0" y="0" width="200" height="20" />
					<text><![CDATA[Group Footer for clnt]]></text>
				</staticText>
			</band> 
		</groupFooter>

	</group>


	<group name="CITY"> <groupExpression><![CDATA[$F{CITY}]]></groupExpression>

		  <groupHeader>
		  	<band height="28" splitType="Stretch">
		  		<staticText>
		  			<reportElement mode="Opaque" x="20" y="0" width="200" height="27" />
		  			<text><![CDATA[Group header for city]]></text>
		  		</staticText>

		  		<textField>
					  <reportElement x="139" y="0" width="416" height="27"/>
		  			<textFieldExpression class="java.lang.String"><![CDATA[$F{CITY}]]></textFieldExpression>
		  		</textField>
		  	</band>
		  </groupHeader>


		  <groupFooter>
		  	<band height="90" splitType="Stretch">
		  		<staticText>
		  			<reportElement x="20" y="0" width="200" height="20" />
		  			<text><![CDATA[Group Footer for city]]></text>
		  		</staticText>
		  	</band>
		  </groupFooter>

	</group>



	<group name="ITM"> <groupExpression><![CDATA[$F{ITM}]]></groupExpression>
		<groupHeader>

			<band height="28" splitType="Stretch">
				<staticText>
					<reportElement x="40" y="0" width="139" height="27"/>
					<text><![CDATA[group header for itm]]></text>
				</staticText>
				<textField>
					<reportElement x="139" y="0" width="416" height="27"/>
					<textFieldExpression class="java.lang.String"><![CDATA[$F{ITM}]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>

		<groupFooter>
			<band height="40" splitType="Stretch">
		  		<staticText>
		  			<reportElement x="40" y="0" width="200" height="20" />
		  			<text><![CDATA[Group Footer for itm]]></text>
		  		</staticText>
			</band>
		</groupFooter>
	</group>

	<detail>
		<band height="40" splitType="Stretch">
			<staticText>
				<reportElement x="60" y="0" width="179" height="20"/>
				<text><![CDATA[COUNT(1)]]></text>
			</staticText>
			<textField>
				<reportElement x="139" y="0" width="416" height="20"/>
				<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COUNT(1)}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement x="60" y="20" width="179" height="20"/>
				<text><![CDATA[SUM(VAL)]]></text>
			</staticText>

			<textField>
				<reportElement x="139" y="20" width="416" height="20"/>
				<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{SUM(VAL)}]]></textFieldExpression>
			</textField>
		</band>
	</detail>

	<columnFooter> </columnFooter>
	<pageFooter>   </pageFooter>
	<summary>      </summary>

</jasperReport>

Third example

Demonstrates grouping on two rather than on field/attribute/column/whatever the term du jour is. It places the group's value for those two fields into one rather than two group headers.
<?xml version="1.0" encoding="UTF-8"?>
<jasperReport 
  xmlns="http://jasperreports.sourceforge.net/jasperreports" 
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
  xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" 
  name         ="report name" 
  pageWidth    =        "300" 
  pageHeight   =        "100"
  columnWidth  =        "300" 
  leftMargin   =          "0" 
  rightMargin  =          "0" 
  topMargin    =          "0" 
  bottomMargin =          "0"
>

	<queryString language="SQL">
		<![CDATA[select
  count(1),
  sum(val),
  itm,
  city,
  clnt
from (
--
      select     1  val, 'Boston'  city, 'apple' itm, 'Small Joe'   clnt  from dual union all
      select     3  val, 'Boston'  city, 'apple' itm, 'Small Joe'   clnt  from dual union all
      select     2  val, 'Boston'  city, 'apple' itm, 'Small Joe'   clnt  from dual union all
      select     4  val, 'Boston'  city, 'apple' itm, 'Small Joe'   clnt  from dual union all
--
      select     8  val, 'Chigaco' city, 'apple' itm, 'Small Joe'   clnt  from dual union all
      select    12  val, 'Chigaco' city, 'apple' itm, 'Small Joe'   clnt  from dual union all
--
      select    22  val, 'Houston' city, 'apple' itm, 'Small Joe'   clnt  from dual union all
      select    19  val, 'Houston' city, 'apple' itm, 'Small Joe'   clnt  from dual union all
--
      -----
--
      select     4  val, 'Boston'  city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
      select     6  val, 'Boston'  city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
      select     2  val, 'Boston'  city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
--
      select    18  val, 'Chigaco' city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
      select    22  val, 'Chigaco' city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
--
      select    50  val, 'Houston' city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
      select    26  val, 'Houston' city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
      select    24  val, 'Houston' city, 'lemon' itm, 'Small Joe'   clnt  from dual union all
--
      ----
      ----
--
      select  2301  val, 'Boston'  city, 'apple' itm, 'Big Inc'     clnt  from dual union all
      select   895  val, 'Boston'  city, 'apple' itm, 'Big Inc'     clnt  from dual union all
      select  3333  val, 'Boston'  city, 'apple' itm, 'Big Inc'     clnt  from dual union all
--
      select  5001  val, 'Chigaco' city, 'apple' itm, 'Big Inc'     clnt  from dual union all
      select  4999  val, 'Chigaco' city, 'apple' itm, 'Big Inc'     clnt  from dual union all
      select  5005  val, 'Chigaco' city, 'apple' itm, 'Big Inc'     clnt  from dual union all
      select  4995  val, 'Chigaco' city, 'apple' itm, 'Big Inc'     clnt  from dual union all
--
      select 10000  val, 'Houston' city, 'apple' itm, 'Big Inc'     clnt  from dual union all
--
      ----
--
      select  2002  val, 'Boston'  city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1001  val, 'Boston'  city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1441  val, 'Boston'  city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  3001  val, 'Chigaco' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  2999  val, 'Chigaco' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  2005  val, 'Chigaco' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1995  val, 'Chigaco' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select  1111  val, 'Chigaco' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  1010  val, 'Houston' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
      select 10101  val, 'Houston' city, 'lemon' itm, 'Big Inc'     clnt  from dual union all
--
      select  8000  val, 'Houston' city, 'pear'  itm, 'Big Inc'     clnt  from dual union all
      select  1111  val, 'Houston' city, 'pear'  itm, 'Big Inc'     clnt  from dual union all
      select   888  val, 'Houston' city, 'pear'  itm, 'Big Inc'     clnt  from dual union all
--
      select     0  val, 'Houston' city, 'lemon' itm, 'XXXXXXXXX'   clnt  from dual union all
      select     0  val, 'X-Ray'   city, 'lemon' itm, 'XXXXXXXXX'   clnt  from dual
--
      ) 
--
    foo_bar
group by 
  clnt,
  city,
  itm
order by 
  clnt,
  city,
  itm]]>
	</queryString>

	<field name="COUNT(1)" class="java.math.BigDecimal"> <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="SUM(VAL)" class="java.math.BigDecimal"> <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="ITM"      class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="CITY"     class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>
	<field name="CLNT"     class="java.lang.String">     <fieldDescription><![CDATA[]]></fieldDescription> </field>

	<group name="CLNT"> <groupExpression><![CDATA[$F{CLNT}]]></groupExpression></group>
	<group name="CITY"> <groupExpression><![CDATA[$F{CITY}]]></groupExpression>

		<groupHeader>
			<band height="20" splitType="Stretch">
				<staticText>
					<reportElement x="0" y="0" width="200" height="20" />
					<text><![CDATA[Group header for clnt and City]]></text>
				</staticText>
				<textField>
					<reportElement x="200" y="0" width="416" height="20" />
					<textFieldExpression class="java.lang.String"><![CDATA[$F{CLNT} + " in " + $F{CITY}]]></textFieldExpression>
				</textField>
        <!--
	  		<textField>
		  			<reportElement mode="Opaque" x="220" y="20" width="300" height="27" />
		  			<textFieldExpression class="java.lang.String"><![CDATA[$F{CITY}]]></textFieldExpression>
	  		</textField>
        -->
			</band>
		</groupHeader>

		<groupFooter>

			<band height="30" splitType="Stretch">
				<staticText>
					<reportElement x="0" y="0" width="200" height="20" />
					<text><![CDATA[Group footer for clnt and city]]></text>
				</staticText>
			</band> 

		</groupFooter>

	</group>



	<group name="ITM"> <groupExpression><![CDATA[$F{ITM}]]></groupExpression>
		<groupHeader>

			<band height="28" splitType="Stretch">
				<staticText>
					<reportElement x="40" y="0" width="139" height="27"/>
					<text><![CDATA[group header for itm]]></text>
				</staticText>
				<textField>
					<reportElement x="139" y="0" width="416" height="27"/>
					<textFieldExpression class="java.lang.String"><![CDATA[$F{ITM}]]></textFieldExpression>
				</textField>
			</band>
		</groupHeader>

		<groupFooter>
			<band height="40" splitType="Stretch">
		  		<staticText>
		  			<reportElement x="40" y="0" width="200" height="20" />
		  			<text><![CDATA[Group Footer for itm]]></text>
		  		</staticText>
			</band>
		</groupFooter>
	</group>

	<detail>
		<band height="40" splitType="Stretch">
			<staticText>
				<reportElement x="60" y="0" width="179" height="20"/>
				<text><![CDATA[COUNT(1)]]></text>
			</staticText>
			<textField>
				<reportElement x="139" y="0" width="416" height="20"/>
				<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COUNT(1)}]]></textFieldExpression>
			</textField>
			<staticText>
				<reportElement x="60" y="20" width="179" height="20"/>
				<text><![CDATA[SUM(VAL)]]></text>
			</staticText>

			<textField>
				<reportElement x="139" y="20" width="416" height="20"/>
				<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{SUM(VAL)}]]></textFieldExpression>
			</textField>
		</band>
	</detail>

	<columnFooter> </columnFooter>
	<pageFooter>   </pageFooter>
	<summary>      </summary>

</jasperReport>