日期:2014-05-16  浏览次数:21392 次

使用birt(百灵报表)开发报表遇到mysql别名无效的问题

比如原始查询为:

SELECT SUM(t.nums) NUMS  FROM table t GROUP BY name

?这样的查询如果是oracle可能没问题,但如果在mysql里,很可能会报这样的错:

{}string:org.eclipse.birt.report.engine.api.EngineException: Column binding "NUMS" 
has referred to a data set column "NUMS" which does not exist.

?????? 提示你指定在data set中NUMS这个数据项没有被绑定。?说明你指定的别名NUMS完全没有生效,而且你如果到output columns里面看,这个字段可能已经被搞成了诸如“UNNAMED_1”之类的名字。原因是birt取的是结果集的列名而不是别名,但当遇到结果集为“SUM(nums)”或是“COUNT(nums)”这样的情况,就不知怎么处理了。

?????? 在尝试了更换各个版本的mysql-jdbc-connector driver之后,问题依然如故。

?????? 一个变通的解决方案就是让原来的查询UNION一个空的结果集:?

SELECT SUM(t.nums) NUMS  FROM table t GROUP BY name
UNION 
SELECT NULL NUMS FROM another_table WHERE 1=0

?another_table是什么不重要,因为不从里面取数据,但最好是存在的。

?这种情况下,一看到列名是null,birt就懵逼了,只有乖乖的用回别名NUMS,? 麻痹的贱货,早这样不就省得老子费事了么。

?