使用hibernate的query查詢時覆蓋值的問題
int maxYear = this.getMaxYear();
int minYear = this.getMinYear();
StringBuffer hql = new StringBuffer(1024);
hql.append(" SELECT a.reason ");
for(int i = minYear; i <= maxYear; i++){
//hql.append(" , Max(CASE a.year WHEN '" + i + "' THEN a.num ELSE 0 END) as m" + (i - minYear + 1) + " ");
hql.append(" , Max(CASE a.year WHEN '" + i + "' THEN a.num ELSE 0 END) as m ");
}
hql.append(" FROM ");
hql.append(" (SELECT d.reasonId AS reason ");
hql.append(" ,YEAR(c.occurDate) AS year ");
hql.append(" ,COUNT(c.id) AS num ");
hql.append(" FROM IMPS_RP_ASSET_DAMAGE c, IMPS_RP_ASSET_DAMAGE_MAP d ");
hql.append(" where c.id = d.assetDamageId ");
if(!StrTool.isBlankStr(lineQueryCondition.getDirectionId())){
hql.append(" and c.directionId = :directionId ");
}
if(lineQueryCondition.getReasonList() != null){
hql.append(" and d.reasonId in (:reasons) ");
}
hql.append(" group by d.reasonId, year(c.occurDate)) a ");
hql.append(" group by a.reason ");
SQLQuery query = this.getSession().createSQLQuery(hql.toString());
if(!StrTool.isBlankStr(lineQueryCondition.getDirectionId())){
query.setParameter("directionId", lineQueryCondition.getDirectionId());
}
if(lineQueryCondition.getReasonList() != null){
query.setParameterList("reasons", lineQueryCondition.getReasonList());
}
List list1 = query.list();
這裡拼出來的sql是這樣的
SELECT a.reason
, Max(CASE a.year WHEN '2008' THEN a.num ELSE 0 END) as m
, Max(CASE a.year WHEN '2009' THEN a.num ELSE 0 END) as m
, Max(CASE a.year WHEN '2010' THEN a.num ELSE 0 END) as m
, Max(CASE a.year WHEN '2011' THEN a.num ELSE 0 END) as m
FROM
(
SELECT d.reasonId AS reason ,YEAR(c.occurDate) AS year ,COUNT(c.id) AS num
FROM IMPS_RP_ASSET_DAMAGE c, IMPS_RP_ASSET_DAMAGE_MAP d
where c.id = d.assetDamageId
group by d.reasonId, year(c.occurDate)
) a group by a.reason
這樣查出來的list中每個元素是陣列物件,陣列物件中的每一個值都被陣列中的第一個值覆蓋,注意看紅色部分是因為sql語句每一列的別名是一樣的,如果拼出來的sql是這樣就不會出現上述問題
SELECT a.reason
, Max(CASE a.year WHEN '2008' THEN a.num ELSE 0 END) as m1
, Max(CASE a.year WHEN '2009' THEN a.num ELSE 0 END) as m2
, Max(CASE a.year WHEN '2010' THEN a.num ELSE 0 END) as m3
, Max(CASE a.year WHEN '2011' THEN a.num ELSE 0 END) as m4
FROM
(
SELECT d.reasonId AS reason ,YEAR(c.occurDate) AS year ,COUNT(c.id) AS num
FROM IMPS_RP_ASSET_DAMAGE c, IMPS_RP_ASSET_DAMAGE_MAP d
where c.id = d.assetDamageId
group by d.reasonId, year(c.occurDate)
) a group by a.reason
相關文章
- Hibernate——Query查詢
- Hibernate的Criteria查詢問題。
- 關於Hibernate的查詢問題
- hibernate批量查詢問題
- MySQL 覆蓋索引、回表查詢MySql索引
- hibernate查詢的問題,請高手賜教!
- hibernate複合主鍵查詢問題
- Laravel query when 的查詢Laravel
- 樹上最小點覆蓋的一類問題
- 一個使用JDBC按Date查詢查詢的問題JDBC
- 【Hibernate框架開發之八】Hibernate 查詢語言Query Language(HQL)框架
- hibernate查詢結果Logic:iterate問題
- 【離散優化】覆蓋問題優化
- 演算法題:頂點覆蓋問題演算法
- 如何解決倉庫無線覆蓋的問題?
- resultMap 和 resultType 的欄位對映覆蓋問題
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- 使用貪心演算法解決集合覆蓋問題演算法
- 資料庫分組查詢最大值的問題資料庫
- 演算法題系列:頂點覆蓋問題演算法
- 還傻傻分不清MySQL回表查詢與索引覆蓋?MySql索引
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- Oracle Flashback query查詢的侷限Oracle
- Hibernate 框架的查詢方式框架
- 【DG】Real-time query實時查詢操作
- 你的 SQL 還在回表查詢嗎?快給它安排覆蓋索引SQL索引
- Hibernate 查詢
- 第9條:覆蓋equals時總要覆蓋hashCode方法
- hibernate的三種查詢方式
- hibernate查詢的方式 都有哪些
- Hibernate的查詢方式與策略
- hibernate的native sql查詢SQL
- hibernate的查詢快取薦快取
- 分治演算法-求解棋盤覆蓋問題演算法
- MySQL優化之覆蓋索引的使用MySql優化索引
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- 基於程式覆蓋資訊的資料庫核心問題定位工具資料庫
- 專案總結二:解決鍵盤覆蓋tableview的問題View