[SQL] 옵션 where 절 재스퍼 보고서
SQL옵션 where 절 재스퍼 보고서
나는이 쿼리하지만 성공하지를 시도하고있다.
SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country
FROM accounts
WHERE ($P!{EmployeeID} is null or assigned_user_id = $P!{EmployeeID})
ORDER BY billing_address_country, billing_address_city
이 URL은 직원 ID를 기준으로 필터링하고 잘 작동합니다 :
.../flow.html?_flowId=viewReportFlow&reportUnit=/reports/samples/EmployeeAccounts&EmployeeID=sarah_id
내가 어디에서 필터를 제거 할 매개 변수 그러나 때 나는 직원 ID를 제거합니다. 그래서 모든 결과가 표시되어야한다.
.../flow.html?_flowId=viewReportFlow&reportUnit=/reports/samples/EmployeeAccounts
내 질문은 어디에 SQL 쿼리에 옵션을 전달하는 올바른 방법이 무엇인지입니다.
해결법
-
==============================
1.좋아, 샘플을 볼 수 있습니다.
좋아, 샘플을 볼 수 있습니다.
예를 들어 우리는 쿼리를 가지고 :
SELECT id, city, street FROM address WHERE city=$P{inputParamCity} ORDER BY city
그러나 우리의 inputParamCity은 정의되지 않은 될 수있다. 이 경우 우리는 오류가 발생했습니다 :
Error filling print... Error preparing statement for executing the report query : SELECT id, city, street FROM address WHERE city=? ORDER BY city
우리는 어떻게 그것을 해결할 수 있습니까? 그것은 매우 간단합니다 - 우리는이 같은 기본 표현과 다른 매개 변수를 추가 할 수 있습니다 :
<parameter name="whereClause" class="java.lang.String" isForPrompting="false"> <defaultValueExpression><![CDATA[()$P{inputParamCity} == null || $P{inputParamCity}.isEmpty()) ? "1=1" : "city='" + $P{inputParamCity} + "'"]]></defaultValueExpression> </parameter>
inputParamCity 파라미터는 "위조"절 "1 = 1"정의되지 -if 도시 필드에 의해 상기 필터를 적용 할 다른 경우에 사용될 것이다.
물론 우리는 쿼리 식을 수정해야와 -이 새로운 매개 변수를 사용합니다. 이 경우 우리의 쿼리 식는 다음과 같습니다
<queryString> <![CDATA[SELECT id, city, street FROM address WHERE $P!{whereClause} ORDER BY city]]> </queryString>
jrxml 파일 :
<?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="optional_where_clause" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="d3648644-0087-4dfc-ac6d-87e82d9bb33e"> <parameter name="inputParamCity" class="java.lang.String"/> <parameter name="whereClause" class="java.lang.String" isForPrompting="false"> <defaultValueExpression><![CDATA[($P{inputParamCity} == null || $P{inputParamCity}.isEmpty()) ? "1=1" : "city='" + $P{inputParamCity} + "'"]]></defaultValueExpression> </parameter> <queryString> <![CDATA[SELECT id, city, street FROM address WHERE $P!{whereClause} ORDER BY city]]> </queryString> <field name="ID" class="java.lang.Integer"/> <field name="CITY" class="java.lang.String"/> <field name="STREET" class="java.lang.String"/> <detail> <band height="20" splitType="Stretch"> <textField> <reportElement uuid="c2a80b99-e087-4839-8e77-841edd899255" x="0" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{ID}]]></textFieldExpression> </textField> <textField> <reportElement uuid="0aafcfd6-60f7-4272-8e7d-0aa77507204b" x="100" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{CITY}]]></textFieldExpression> </textField> <textField> <reportElement uuid="c8726513-8250-43ec-bafc-003e81094c27" x="200" y="0" width="100" height="20"/> <textElement/> <textFieldExpression><![CDATA[$F{STREET}]]></textFieldExpression> </textField> </band> </detail> </jasperReport>
미정 inputParamCity 파라미터를 이용한 경우 (값이 설정되지 않은) 결과가 될 것이다 :
이 경우 엔진에 의해 사용 된 쿼리는 다음과 같습니다
SELECT id, city, street FROM address WHERE 1=1 ORDER BY city
우리가 설정 한 경우, 예를 들어, 결과 매개 변수 inputParamCity의 값 시카고은 다음과 같습니다
이 경우 엔진에 의해 사용 된 쿼리는 다음과 같습니다
SELECT id, city, street FROM address WHERE city='Chicago' ORDER BY city
노트:
-
==============================
2.절을이 방법으로 수행 할 수 있습니다 어디는 선택 생각한다 -
절을이 방법으로 수행 할 수 있습니다 어디는 선택 생각한다 -
SELECT name, phone_office, billing_address_city, billing_address_street, billing_address_country FROM accounts WHERE (assigned_user_id = $P{EmployeeID} or $P{EmployeeID} is null) ORDER BY billing_address_country, billing_address_city
이 상태에서는 where 절 조건을 적용하지 않고 당신에게 모든 값을 제공합니다 모든 직원의 ID를 전달하지 않는 경우.
from https://stackoverflow.com/questions/19401825/optional-where-clause-jasper-reports by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] JPA 기본 쿼리는 반환 개체하지만 역 참조 클래스 캐스트 예외가 발생 가입 (0) | 2020.06.18 |
---|---|
[SQL] 어떻게 "유산"외부 왼쪽 오라클에 문을 가입 변환합니까? (0) | 2020.06.18 |
[SQL] SQL을 뺀 팬더 아날로그는 / 여러 열을 사용하여 연산자를 EXCEPT (0) | 2020.06.18 |
[SQL] 오라클 SQL : 실종 날짜를 기입 (0) | 2020.06.18 |
[SQL] MS Access에서 한 줄에 거기에 여러 값을 가진 여러 행을, 합치 (0) | 2020.06.18 |