2012-09-21 44 views
0

這就是我的XML的樣子。所有定義的屬性都有相應的getter和setter定義。嘗試各種建議後,我無法解決「無效列索引」問題。列索引無效錯誤 - 無法解決問題

SELECT語句返回所有適當列出的屬性,並且我驗證了與單獨的Query相同的運行。

我從指定日期範圍之間的特定組獲取數據表中的數據。

<resultMap id="result" type="ValueStats"> 
     <result property="GroupId" column="GROUP_ID"/> 
     <result property="valueId" column="VALUE_ID"/> 
     <result property="valueName" column="VALUE_NAME"/> 
     <result property="valImp" column="IMP"/> 
     <result property="valCks" column="CKS"/> 
     <result property="valCR" column="CR"/> 
     <result property="valAp" column="AP"/> 
     <result property="valRv" column="RV"/> 
     <result property="valCt" column="CT"/> 
     <result property="fromDate" column="FROM_DATE"/> 
     <result property="toDate" column="END_DATE"/> 
     <result property="valKc" column="KC"/> 
    </resultMap> 

    <select id="getAll" resultMap="result"> 
     SELECT 
       B.GROUP_ID AS GROUP_ID, 
       B.VALUE_ID AS VALUE_ID, 
      B.VALUE_NAME AS VALUE_NAME, 
      A.IMP AS IMP, 
      A.CKS AS CKS, 
      A.CR AS CR, 
      A.AP AS AP, 
      A.RV AS RV, 
      A.CT AS CT, 
      #{fromDate} AS FROM_DATE, 
      #{toDate} AS END_DATE, 
      A.KC AS KC 
     FROM 
     (SELECT 
       Z.VALUE_ID AS VALUE_ID, 
       ROUND(AVG(Z.IMP), 0) AS IMP, 
       ROUND(CEIL(AVG(Z.CKS)),0) AS CKS, 
       ROUND(AVG(Z.CR),5) AS CR, 
       ROUND(AVG(Z.AP),2) AS AP, 
       ROUND(AVG(Z.CT),2) AS CT, 
       ROUND(AVG(Z.RV),2) AS RV, 
       ROUND(COUNT(Z.VALUE_ID)) AS KC 
       FROM 
       (SELECT 
        VALUE_ID AS VALUE_ID, 
        IMP AS IMP, 
        TO_DATE(DATE_ID,'YYYYMMDD') AS DATEVAL, 
        CKS, 
        CR, 
        AP, 
        CT, 
        RV 
      FROM XY_STATS WHERE GROUP_ID='#{groupId}') Z 
      WHERE 
      Z.DATEVAL <![CDATA[<]]> TO_DATE(#{toDate}, 'DD-MM-YY') AND 
      Z.DATEVAL >= TO_DATE(#{fromDate}, 'DD-MM-YY') 
      GROUP BY Z.VALUE_ID) A INNER JOIN XY_VALUE_SETTINGS B 
      ON A.VALUE_ID = B.VALUE_ID 
    </select> 

+2

你引用了一個動態值FROM XY_STATS WHERE GROUP_ID ='#{groupId}')Z;準備好的語句將用其他引號替換該值。這不應該解決嗎?另外:將< and >替換爲<和>而不是CDATA部分,使sql代碼更具可讀性。 –

+0

謝謝。我的錯。我刪除了groupId的單引號,它工作。 – user1652054

+0

然後添加了答案;請標記爲已回答,以便不回答此問題。乾杯。 –

回答

3

你必須圍繞一個動態值報價:

... 
FROM XY_STATS WHERE GROUP_ID='#{groupId}') Z 
... 

準備好的聲明將取代其他報價的價值。