jasper-reports
#jasper-отчеты
Вопрос:
У меня есть два параметра в запросе, выполненном для отчета JasperReports.
Что-то вроде этого:
select * from customer where custid between $P{param1} and $P!{param2}
Как я могу распечатать все идентификаторы клиентов, которые входят в параметр?
Итак, предположим, я ввел идентификатор cust 1 в paramid1 и 10 в paramid2.
Теперь сгенерированные данные будут содержать все идентификаторы от 1 до 10.
Мне нужно распечатать эти идентификаторы.
Я не могу использовать поле, поскольку один идентификатор клиента связан с несколькими элементами.
Комментарии:
1.
I can't use field since one customer id is associated with mutiple items.
— Вы также можете посмотреть на$X{IN}
выражение
Ответ №1:
Вы можете использовать $X{BETWEEN, <column_name>, <left_parameter_name>, <right_parameter_name>}
выражение для получения значений в некотором диапазоне.
Пример
Шаблон отчета
Для построения этого отчета я использовал шаблон данных «Sample DB» от Jaspersoft Studio (JSS).
<?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="Between usage example" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
<property name="com.jaspersoft.studio.data.defaultdataadapter" value="Sample DB"/>
<parameter name="minId" class="java.lang.Integer">
<defaultValueExpression><![CDATA[10248]]></defaultValueExpression>
</parameter>
<parameter name="maxId" class="java.lang.Integer">
<defaultValueExpression><![CDATA[10260]]></defaultValueExpression>
</parameter>
<queryString language="SQL">
<![CDATA[SELECT shipcity, orderid FROM orders WHERE $X{BETWEEN, orderid, minId, maxId} ORDER BY orderid]]>
</queryString>
<field name="shipcity" class="java.lang.String"/>
<field name="orderid" class="java.lang.Integer"/>
<columnHeader>
<band height="30" splitType="Stretch">
<staticText>
<reportElement x="0" y="0" width="278" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[CIty]]></text>
</staticText>
<staticText>
<reportElement x="278" y="0" width="277" height="30"/>
<textElement textAlignment="Center" verticalAlignment="Middle"/>
<text><![CDATA[Order Id]]></text>
</staticText>
</band>
</columnHeader>
<detail>
<band height="30" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="278" height="30"/>
<textFieldExpression><![CDATA[$F{shipcity}]]></textFieldExpression>
</textField>
<textField>
<reportElement x="278" y="0" width="277" height="30"/>
<textFieldExpression><![CDATA[$F{orderid}]]></textFieldExpression>
</textField>
</band>
</detail>
</jasperReport>
В этом примере элементы с orderid меньше значения maxId
параметра и больше значения minId
параметра извлекаются из базы данных.
Сгенерированный вывод
Сгенерированный на выходе JSS будет:
Другие выражения
Получить значения в инклюзивном диапазоне
В этом случае выражение будет:
WHERE $X{[BETWEEN], orderid, minId, maxId}
— minId ≤ orderid ≤ maxId
.
Получить значения в исключительном диапазоне
В этом случае выражение будет:
WHERE $X{BETWEEN, orderid, minId, maxId}
— minId < orderid < maxId
.
Получить значения в диапазоне, включая левую границу и исключительную правую границу
В этом случае выражение будет:
WHERE $X{[BETWEEN, orderid, minId, maxId}
— minId ≤ orderid < maxId
.
Получить значения в диапазоне, исключительную левую границу и включающую правую границу
В этом случае выражение будет:
WHERE $X{BETWEEN], orderid, minId, maxId}
— minId < orderid ≤ maxId
.
Получить значения, меньшие или равные
В этом случае выражение будет:
WHERE $X{LESS], orderid, maxId}
— orderid ≤ maxId
.
Получить значения меньше
В этом случае выражение будет:
WHERE $X{LESS, orderid, maxId}
— orderid < maxId
.
Получить значения, большие или равные
В этом случае выражение будет:
WHERE $X{[GREATER, orderid, minId}
— orderid ≥ minId
.
Получить значения, превышающие
В этом случае выражение будет:
WHERE $X{GREATER, orderid, minId}
— orderid > minId
.
Дополнительная информация
Более подробную информацию о синтаксисе запроса можно найти здесь