| René Nyffenegger's collection of things on the web | |
|
René Nyffenegger on Oracle - Most wanted - Feedback
|
Jasper - Pivot Queries | ||
|
The table from which is selected:
create table pivot_test as select 1 col_1, 2 col_2, 3 col_3, 4 col_4, 5 col_5, 6 col_6, 7 col_7, 8 col_8, '1st group' grp from dual union all select 10 col_1, 20 col_2, 30 col_3, 40 col_4, 50 col_5, 60 col_6, 70 col_7, 80 col_8, '1st group' grp from dual union all select -1 col_1, -2 col_2, -3 col_3, -4 col_4, -5 col_5, -6 col_6, -7 col_7, -8 col_8, '1st group' grp from dual union all -- select 1.1 col_1, 2.2 col_2, 3.3 col_3, 4.4 col_4, 5.5 col_5, 6.6 col_6, 7.7 col_7, 8.8 col_8, '2st group' grp from dual;
Uses a sub dataset in order to create a sort-of pivot query. See also this link.
<?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="pivot_test_1"
pageWidth="595"
pageHeight="842"
columnWidth="535"
leftMargin="20"
rightMargin="20"
topMargin="20"
bottomMargin="20">
<subDataset name="dataset1">
<parameter name="GRP" class="java.lang.String"/>
<queryString>
<![CDATA[
---------------
select
col_1, col_2, col_3, col_4
from pivot_test
where
grp = $P{GRP}
---------------
]]>
</queryString>
<field name="COL_1" class="java.math.BigDecimal"/>
<field name="COL_2" class="java.math.BigDecimal"/>
<field name="COL_3" class="java.math.BigDecimal"/>
<field name="COL_4" class="java.math.BigDecimal"/>
</subDataset>
<subDataset name="dataset2">
<parameter name="GRP" class="java.lang.String"/>
<queryString>
<![CDATA[
---------------------------
select
col_5, col_6, col_7, col_8
from pivot_test
where
grp = $P{GRP}
-------------------
]]>
</queryString>
<field name="COL_5" class="java.math.BigDecimal"/>
<field name="COL_6" class="java.math.BigDecimal"/>
<field name="COL_7" class="java.math.BigDecimal"/>
<field name="COL_8" class="java.math.BigDecimal"/>
</subDataset>
<queryString language="SQL">
<![CDATA[
-----------------------------------
select distinct grp from pivot_test
-----------------------------------
]]>
</queryString>
<field name="GRP" class="java.lang.String"/>
<group name="GRP">
<groupExpression><![CDATA[$F{GRP}]]></groupExpression>
<groupHeader>
<band height="28" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="100" height="14"/>
<textFieldExpression class="java.lang.String"><![CDATA["GRP: " + $F{GRP}]]></textFieldExpression>
</textField>
</band>
</groupHeader>
<groupFooter><band height="14"/></groupFooter>
</group>
<detail>
<band height="42">
<componentElement>
<reportElement x="0" y="14" width="555" height="14"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="dataset1">
<datasetParameter name="GRP">
<datasetParameterExpression><![CDATA[$F{GRP}]]></datasetParameterExpression>
</datasetParameter>
</datasetRun>
<jr:listContents height="14">
<textField pattern="###0.00;-###0.00">
<reportElement x="50" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_1}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="150" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_2}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="250" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_3}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="350" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_4}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
<staticText>
<reportElement x="50" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_1]]></text>
</staticText>
<staticText>
<reportElement x="150" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_3]]></text>
</staticText>
<staticText>
<reportElement x="250" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_2]]></text>
</staticText>
<staticText>
<reportElement x="350" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_4]]></text>
</staticText>
</band>
<band height="42">
<componentElement>
<reportElement x="0" y="14" width="555" height="14"/>
<jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd">
<datasetRun subDataset="dataset2">
<datasetParameter name="GRP">
<datasetParameterExpression><![CDATA[$F{GRP}]]></datasetParameterExpression>
</datasetParameter>
</datasetRun>
<jr:listContents height="14">
<textField pattern="###0.00;-###0.00">
<reportElement x="50" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_5}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="150" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_6}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="250" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_7}]]></textFieldExpression>
</textField>
<textField pattern="###0.00;-###0.00">
<reportElement x="350" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$F{COL_8}]]></textFieldExpression>
</textField>
</jr:listContents>
</jr:list>
</componentElement>
<staticText>
<reportElement x="50" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_5]]></text>
</staticText>
<staticText>
<reportElement x="150" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_6]]></text>
</staticText>
<staticText>
<reportElement x="250" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_7]]></text>
</staticText>
<staticText>
<reportElement x="350" y="0" width="100" height="14"/>
<textElement textAlignment='Right'/>
<text><![CDATA[COL_8]]></text>
</staticText>
</band>
</detail>
</jasperReport>
See also other Jasper examples.
|