The first way (if the number of columns are fixed, but you could use crosstab if required dinamically(all consist of your requirements)): You could create report template using iReport with for example 5 columns. Every column has header and detail. Header like as detail can has expression (on iReport right mouse click on element ->"Edit expression") on this section you could write expression where you can specify which field or label should jasper print. You can run report from java and send parameters which data should print. Example expression: $P{VALUE_FROM_JAVA} == 1 ? $F{FIELD1} : $P{VALUE_FROM_JAVA} == 2 ? $F{FIELD2} :"" The same for label. But it's not the best way because you should get from DB all data: FIELD1 and FIELD2 and on runtime jasper will exec your expression and print required data. The second way: You can generate using java jrxml file by hand. It's simple xml. And on runtime past required labels, fields and query. And then just compile and run it. The plus is you will get only data that required for your report. But if you use jasper server you will need to import this file to server. The minus it's could be more complicated :) If you have any questions - you are welcome :) With best regards, Pavel Post Edited by pavel_psycho at 07/26/2011 13:59