2013-05-09 37 views
0

我试图做一个查询这样的主题:JFreeChart using numeric query ORACLE的JFreeChart使用数字查询Oracle错误

生成一个条形图,可是我总接收错误:值java.sql.SQLException:JDBCCategoryDataset.executeQuery( ):从数据库返回的列不足。

我的代码如下:

SELECT CASE WHEN TIME>23.73 AND TIME<=24.0 THEN '23.73<TIME<=24.10' 
    WHEN TIME>24.10 AND TIME<=25.68 THEN '24.10<TIME<=25.68'   
    WHEN TIME>25.68 AND TIME<=27.36 THEN '25.68<TIME<=27.36' 
     ELSE '27.36<TIME' 
    END || ' with value '|| COUNT(*) v FROM SWIMMER 
GROUP BY CASE 
WHEN TIME>23.73 AND TIME<=24.10 THEN '23.73<TIME<=24.10' 
WHEN TIME>24.10 AND TIME<=25.68 THEN '24.10<TIME<=25.68' 
WHEN TIME>25.68 AND TIME<=27.36 THEN '25.68<TIME<=27.36' 
ELSE '27.36<TIME' END 

什么,我做错了什么?

+0

交叉贴[这里](http://www.jfree.org/forum/viewtopic.php?f=3&t=116455)。 – trashgod 2013-05-13 04:28:15

回答

1

上面引用的SQL会导致错误(使用SQL Fiddle来检查代码),因为两个case语句不匹配JFreeChart只是重新使用误导性消息来抛出错误。

如果你的SQL是正确的JFreeChart告诉你,你需要结果集中有额外的列,因为你将case语句与查询总数连接起来,如果它工作的话,只会返回一列。

尝试使用这个SQL:

SELECT time_range || ' with value ' || total as category, total 
    FROM (SELECT time_range, COUNT(*) AS total 
      FROM (SELECT CASE 
         WHEN TIME > 23.73 
           AND TIME <= 24.0 THEN 
          '23.73<TIME<=24.10' 
         WHEN TIME > 24.10 
           AND TIME <= 25.68 THEN 
          '24.10<TIME<=25.68' 
         WHEN TIME > 25.68 
           AND TIME <= 27.36 THEN 
          '25.68<TIME<=27.36' 
         ELSE 
          '27.36<TIME' 
         END AS time_range 
        FROM swimmer) 
     GROUP BY time_range) 
+0

我试过了: SELECT intrvl || '有价值'|| (*)v FROM( SELECT CASE when when> 23.73 AND TIME <= 24.0 then '23 .73

+0

GrahamA,我需要简化我的查询在最大,因为有时有一百间隔(我只显示与四)!我会疯狂与选择内的许多选择!我混淆了你的答案:为什么需要许多别名?我的数据库中只有一个字段的所有工作(数值字段TIME) 为什么我的最后一个没有工作?最好的祝愿,PaulH。 – PaulHB 2013-05-09 20:30:55

+0

@ user2113983您的原始查询不起作用,因为您在select中使用了24.0,而在group by中使用了24.10。你的评论中的一个不起作用,因为你仍然只有一列,我已经纠正它[这里](http://www.sqlfiddle.com/#!4/02d93/13)。我用了3个在线查询(别名),所以我不必重复case语句 - 代码是[dry](http://en.wikipedia.org/wiki/Don't_repeat_yourself) – GrahamA 2013-05-09 20:53:36