sum(case.. when.. then...)


最近周一到周五實習,周末又要做畢業設計,沒什么時間寫筆記,就隨意記錄一下實習項目中的一些小知識點:

 

月報信息HpYbxx
項目申報材料HpXmsbcl

對應關系為一對多,一個項目申報材料對應多個月報信息

月報記錄有狀態字段,“0”為按時上交,“1”為補交

功能:查詢某一時間段內交了的總條數,和有多少條是補交的

代碼如下:

public List reportStatistics(String startDate, String endDate, int start,
int limit) {
Session session = this.getSession();
String hql = "select xmxx,count(*),sum(CASE WHEN yb.ybzt='1' THEN 1 ELSE 0 END) from HpYbxx yb,HpXmsbcl xmxx where yb.xmbh=xmxx.xmbh";
if (!startDate.equals("") && startDate != null)
hql = hql + " and yb.yf>='" + startDate + "'";
if (!endDate.equals("") && endDate != null)
hql = hql + " and yb.yf<='" + endDate + "'";
hql = hql + "group by xmxx.xmbh";
return session.createQuery(hql).setFirstResult(start).setMaxResults(
limit).list();
}

關鍵點:sum(CASE WHEN yb.ybzt='1' THEN 1 ELSE 0 END ) ,此處篩選計算出補交的有多少條,要注意這里的聚合函數應該為SUM()而不是COUNT()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM