Java 主查询中order by子句的三元运算符
我正在开发struts 2 web应用程序,其中Java 主查询中order by子句的三元运算符,java,sql,jasper-reports,Java,Sql,Jasper Reports,我正在开发struts 2 web应用程序,其中 我有一个JasperReports报告(jrxml),其中有一个主查询 <parameter name="getOrder" class="java.lang.String"> <defaultValueExpression><![CDATA[]]></defaultValueExpression> </parameter> <queryString> <
我有一个JasperReports报告(jrxml),其中有一个主查询
<parameter name="getOrder" class="java.lang.String">
<defaultValueExpression><![CDATA[]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[select USER_ID, USER_NAME,CURRENT_ADDRESS,CURRENT_TOWN,CURRENT_POSTAL_CODE,CURRENT_COUNTRY,USER_ADDRESS group by USER_ID, USER_NAME,CURRENT_ADDRESS,CURRENT_TOWN,CURRENT_POSTAL_CODE,CURRENT_COUNTRY,USER_ADDRESS order by $P!{getOrder}, USER_ID]]>
</queryString>
这里,pdfBean.getManageOrder()将从我将在报告中传递的
标记中为我提供字符串值
现在,根据在“getOrder”中选择的值,我需要用相应的数据替换上面查询字符串中的数据
sql Order by子句取决于如下所选的值
p{getOrder}.equals(“1”)?“用户名”:$p{getOrder}.equals(“2”)?“当前地址”:$p{getOrder}.equals(“3”)?“当前城镇”:$p{getOrder}.equals(“4”)?“当前邮政编码”:$p{getOrder}.equals(“5”)?“国家”:“
如果选择值3,则查询应如下所示
<select name="FormBean.orderByField" id="orderByField">
<option value='1'
<s:if test="FormBean.orderByField == 1">selected="selected"</s:if>>
<fmt:message key="name" />
</option>
<option value='2'
<s:if test="FormBean.orderByField == 2">selected="selected"</s:if>>
<fmt:message key="current address" />
</option>
<option value='3'
<s:if test="FormBean.orderByField == 3">selected="selected"</s:if>>
<fmt:message key="user address" />
</option>
<option value='4'
<s:if test="FormBean.orderByField == 4">selected="selected"</s:if>>
<fmt:message key="postal code" />
</option>
<option value='5'
<s:if test="FormBean.orderByField == 5">selected="selected"</s:if>>
<fmt:message key="country" />
</option>
</select>
<queryString>
<![CDATA[select USER_ID, USER_NAME,CURRENT_ADDRESS,CURRENT_TOWN,CURRENT_POSTAL_CODE,CURRENT_COUNTRY,USER_ADDRESS group by USER_ID, USER_NAME,CURRENT_ADDRESS,CURRENT_TOWN,CURRENT_POSTAL_CODE,CURRENT_COUNTRY,USER_ADDRESS order by **CURRENT_TOWN**, USER_ID]]>
</queryString>
我希望它在JR报告(jrxml)中完成。pdf报告将根据在屏幕的选择框中选择的值进行排序
case $P{getOrder}
WHEN 1 THEN 'USER_NAME'
WHEN 2 THEN 'CURRENT_ADDRESS'
WHEN 3 THEN 'CURRENT_TOWN'
ELSE ''
END
你们的问题是什么?我如何在主查询中的ORDERBY子句中使用三元运算符?是的。您可以使用参数,例如:您可以在参数表达式中使用三元运算符。带查询的示例参数是yes。它很有用。但在我的例子中,我不想直接替换值的数据(硬编码),但我想在jasperReport的报告中仅基于屏幕上选择的值(1,2,3,4,5)使用条件语句,即(三元运算符),然后使用$P按顺序子句使用它!{paramName}语法是这样的:$P{getOrder}.equals(“1”)?“USER_NAME”:$P{getOrder}.equals(“2”)?“CURRENT_ADDRESS”:$P{getOrder}.equals(“3”)?“CURRENT_TOWN”:$P{getOrder}.equals(“4”)?“CURRENT_邮政编码”:$P{getOrder}.equals(“5”)?“COUNTRY:”用于jasper报告中的order条款您是否尝试在jasper报告中使用case?@Alex,我为SQL语句提供了这个选项,但它被要求提供JasperReports。谢谢提醒。
case $P{getOrder}
WHEN 1 THEN 'USER_NAME'
WHEN 2 THEN 'CURRENT_ADDRESS'
WHEN 3 THEN 'CURRENT_TOWN'
ELSE ''
END