SQLMAP:
1.
<select id="selectSiteIDCd" resultMap="userLoginStatSite">
SELECT 
SITE_ID,
SITE_CD 
FROM 
SITE
</select> 
2.
<select id="selectUserLoginByHourStat" parameterClass="UserLoginStatInfo" resultMap="userLoginResult">
SELECT
      STAT_TM||':00~'||STAT_TM||':59' AS timeStamp,  
          <iterate property="siteList">
          SUM(CASE WHEN SITE_ID=#siteList[].siteId# THEN LOGIN_CNT ELSE 0 END) AS $siteList[].siteCd$,
          </iterate>          
          TO_CHAR((SELECT MAX(REG_DTM) FROM HOUR_LOGIN_STAT WHERE STAT_DT BETWEEN #startTime# AND #endTime# ),'YYYY/MM/DD HH24:MI') AS regDtm
FROM
       LOGIN_STAT
      
GROUP BY STAT_TM 
ORDER BY STAT_TM       
</select>
这是第2个<select>的sql语句1. SELECT
2.       STAT_TM||':00~'||STAT_TM||':59' AS timeStamp,  
3.          SUM(CASE WHEN SITE_ID='1' THEN LOGIN_UNI_CNT ELSE 0 END) AS Q,
4.          SUM(CASE WHEN SITE_ID='2' THEN LOGIN_CNT ELSE 0 END) AS C,
5.          TO_CHAR((SELECT MAX(REG_DTM) FROM HOUR_LOGIN_STAT WHERE STAT_DT BETWEEN '20090101' AND '20091111' ),'YYYY/MM/DD HH24:MI') AS regDtm
6. FROM
7.       LOGIN_STAT
8. GROUP BY STAT_TM 
9. ORDER BY STAT_TM     由于3,4行的SITE_ID和列名是动态生成的,所以在resultMap填写column不知道改怎么写如下?号该怎么填。
或者是否还有别的方法
<resultMap id="userLoginResult" class="UserLoginStatInfo"> <result property="timeStamp" column="timeStamp"/>
<result property="qxLoginCnt" column="?"/>
<result property="cyLoginCnt" column="?"/>
<result property="regDtm" column="regDtm"/>
</resultMap>小弟在此谢过了,救救我吧

解决方案 »

  1.   

    简单的说就是 select 查询的列不是固定的,需要动态的生成
    问题是resultMap跟随sql语句也跟着变化呢?
    或者还有别的方法吗?不管你答没答复 只要您看一眼 我都谢谢您,
      

  2.   

    <resultMap id="userLoginResult" class="UserLoginStatInfo"> <result property="timeStamp" column="timeStamp"/> 
    <result property="qxLoginCnt" column="?"/> 
    <result property="cyLoginCnt" column="?"/> 
    <result property="regDtm" column="regDtm"/> 
    </resultMap> 
     SELECT 
    2.       STAT_TM||':00~'||STAT_TM||':59' AS timeStamp,  
    3.          SUM(CASE WHEN SITE_ID='1' THEN LOGIN_UNI_CNT ELSE 0 END) AS Q, 
    4.          SUM(CASE WHEN SITE_ID='2' THEN LOGIN_CNT ELSE 0 END) AS C, 
    5.          TO_CHAR((SELECT MAX(REG_DTM) FROM HOUR_LOGIN_STAT WHERE STAT_DT BETWEEN '20090101' AND '20091111' ),'YYYY/MM/DD HH24:MI') AS regDtm 
    6. FROM 
    7.      LOGIN_STAT 
    8. GROUP BY STAT_TM 
    9. ORDER BY STAT_TM
    上面xml文件中的<result property="qxLoginCnt" column="?"/>,<result property="cyLoginCnt" column="?"/> 的colum应和你要对应的列名(或列的别名)相同。
      

  3.   

    用resultClass="java.util.HashMap"哟。如果是动态的,而且列名不确定,并且不在一个Object里的话。