我需要能够在执行查询时将列名称作为jasper报告中字段引用的参数传递。
这是必需的,以便.jrxml报告不会与查询中列出的列名相关联(有效地允许在jrxml报告上运行任何sql查询)。
我想对图表中的值或类别表达式执行$ F {$ P!{Parameter1}}之类的操作,其中:
<parameter name="Parameter1" class="java.lang.String" isForPrompting="false">
<defaultValueExpression><![CDATA["country"]]></defaultValueExpression>
</parameter>
但我收到错误:“找不到字段”获得$ P!{Parameter1 --- net.sj.jasperreports.engine.design.JRDesignExpression
类别数据集(图表):
<categoryDataset>
<categorySeries>
<seriesExpression><![CDATA[country]]></seriesExpression>
<categoryExpression><![CDATA[$F{$P!{Parameter1}}]]></categoryExpression>
<valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
</categorySeries>
</categoryDataset>
我100%有人试图做同样的事情,有什么建议吗?
答案 0 :(得分:0)
你可以尝试这个,直接使用参数和默认值,在你的情况下是列名。
<categoryDataset>
<categorySeries>
<seriesExpression><![CDATA[$P!{Parameter1}]]></seriesExpression>
<categoryExpression><![CDATA[$P!{Parameter1}]]></categoryExpression>
<valueExpression><![CDATA[$F{number_of_sites}]]></valueExpression>
</categorySeries>
</categoryDataset>
答案 1 :(得分:0)
我会尝试使用你在categoryDataset
内的参数来操纵查询(比如动态sql)。
我们多次使用这些来准备我们的查询以检索指定的列以进行分组(主要是使用jasperreports),并且我非常确定这对你也有用。
您的查询将如下所示:
select
column1,
column2,
column3,
column4,
$P!{Parameter1} as GROUP_COL
from
yourTable
也涵盖了这一点
答案 2 :(得分:-1)
您不能将SQL中的变量设置为列名或表名。但是你可以通过以下技巧。 我希望这会对你有所帮助。
DECLARE @variable1 system; /* type system is datatype for tablenames, columns etc.*/
DECLARE @variable2 system;
DECLARE @variable3 system;
Select @variable1 = tablename, @variable2 = columname, @variable3 = variable
From tempdb.dbo.powerdeviation
Where ID = @ID
/*please note that if the select result is giving you more then one result,
the first row is used as the variable! There will be not error*/
DECLARE @sqlCommand nvarchar(max)='
SELECT something
FROM [db@variable1].[dbo].['+ @variable2 +']
where LogInterval = 10 and PlantID = ''@variable3''
'
SET @sqlCommand = REPLACE(@sqlCommand,'@variable',@variable);
SET @sqlCommand = REPLACE(@sqlCommand,'@variable2',@variable2);
SET @sqlCommand = REPLACE(@sqlCommand,'@variable3',@variable3)
PRINT @sqlCommand;
EXEC sys.sp_executesql @sqlCommand;