使用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
相關文章
- MySQL 覆蓋索引、回表查詢MySql索引
- 線段覆蓋問題
- 棋盤覆蓋問題
- Laravel query when 的查詢Laravel
- 如何使用Hibernate/JPA的JPQL/HQL查詢提取?
- Hibernate 查詢
- firefox覆蓋原來網頁的問題Firefox網頁
- hibernate查詢的方式 都有哪些
- hibernate的三種查詢方式
- 樹上最小點覆蓋的一類問題
- Laravel MongoDB 時間區間查詢的問題LaravelMongoDB
- 【離散優化】覆蓋問題優化
- Hibernate-ORM:13.Hibernate中的連線查詢ORM
- resultMap 和 resultType 的欄位對映覆蓋問題
- 如何解決倉庫無線覆蓋的問題?
- 使用Hibernate、JPA、Lombok遇到的有趣問題Lombok
- 使用貪心演算法解決集合覆蓋問題演算法
- hibernate中hql查詢
- hibernate中的no session問題Session
- 還傻傻分不清MySQL回表查詢與索引覆蓋?MySql索引
- SQL Server 查詢超時問題排查SQLServer
- 你的 SQL 還在回表查詢嗎?快給它安排覆蓋索引SQL索引
- 公園無線覆蓋維護問題
- Hibernate查詢自動更新
- 使用並查集處理集合的合併和查詢問題並查集
- 如何在Hibernate/JPA的實體和查詢中使用Java 8 Optional?Java
- 分治演算法-求解棋盤覆蓋問題演算法
- 一個MySQL多表查詢的問題MySql
- MySQL優化之覆蓋索引的使用MySql優化索引
- 測試覆蓋率 之 Cobertura的使用
- Elasticsearch Query DSL查詢入門Elasticsearch
- [20231017]使用dbms_xplan.display_awr查詢遇到的問題.txt
- 企業WiFi覆蓋,解決覆蓋四大難題WiFi
- 基於程式覆蓋資訊的資料庫核心問題定位工具資料庫
- 391、Java框架46 -【Hibernate - 查詢HQL、查詢Criteria、查詢標準SQL】 2020.10.19Java框架SQL
- [HAOI2007][洛谷P2218]覆蓋問題
- 2020年10月24日 矩陣覆蓋問題矩陣
- Kylin儲存和查詢的分片問題
- 關於 mysql 中的 rand () 查詢問題MySql