2013-05-09 26 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