标签:
从下面的表中根据标示统计出下面的页面效果, 本想用一条 sql 试了半天, 除了分组子查询都不行, 还是通过程序来解决这类问题;
select t.workid,count(t.workid),t.status from t_st_kflist t where 1=1 group by t.workid,t.status;
共计3条数据;
搞了半天还是不可以, 看来 sql 是解决不聊了;
要求: 表中的workID即工号可以有多条(可以相同), 但是到了页面上显示就必须只能有一个workID, 每个相同的status进行叠加;
分析: 既然 workID不变 , 不论多少个workID最终都显示一条同时相同的状态进行叠加已达到统计效果, Map 有个有个特点即,
key不可重复如果重复 value 将被最后一个put进入的值替换, 到这里问题已经基本解决, 接下来就是数据怎么存到map中
才具有下面的页面显示效果 将workID作为键, value 是动态增加的同时还需要区分不同status表示的含义好办我可以使用
一个Map作为值;
java code:
package com.piaomeng.b2bv5.stat.controller; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import com.piaomeng.b2bv5.core.auth.AuthPassport; import com.piaomeng.b2bv5.stat.po.KfOrderInfo; import com.piaomeng.b2bv5.stat.service.IKfOrderService; import com.piaomeng.b2bv5.util.StringUtil; @Controller @Scope("prototype") @RequestMapping("/statistics") public class KfListController { @Autowired private IKfOrderService iKfOrderService; @RequestMapping("/selectKfList") @AuthPassport(auth="/statistics/selectKfList", check=false) public String selectKfList(Map<String,Object> map, KfOrderInfo koi, HttpServletRequest request, String beginDate,String endDate, String beginLogDate2,String endLogDate2){ if (koi != null) { map.put("beginDate", beginDate); map.put("endDate", endDate); map.put("workid", koi.getWorkid()); } List<KfOrderInfo> lists = iKfOrderService.selectList(map); Map<String, Map<String, Object>> parent = new HashMap<String, Map<String,Object>>(); Map<String, Object> children = new HashMap<String, Object>(); /** * 状态: 10 等待出票 11 出票处理中 16更换编码 30废票 20正常退票 22无法退票 32无法废票 40申请改期 42无法改期 12出票失败 90平台退款 */ int wt = 0, ta = 0, ca = 0, it = 0, nrt = 0, cnrt = 0, cnit = 0, tafr = 0, cbr = 0, tdf = 0, pfr = 0; if (lists.size() > 0 && lists != null) { for (KfOrderInfo item : lists) { String status = item.getStatus(); if (StringUtil.notEmpty(status)) { if (status.equals("10")) {// 10 等待出票 wt++; children.put("wt", wt); }else if (status.equals("11")) {// 11 出票处理中 ta++; children.put("ta", ta); }else if (status.equals("16")) {// 16更换编码 ca++; children.put("ca", ca); }else if (status.equals("30")) {// 30废票 it++; children.put("it", it); }else if (status.equals("20")) {// 20正常退票 nrt++; children.put("nrt", nrt); }else if (status.equals("22")) {// 22无法退票; cnrt++; children.put("cnrt", cnrt); }else if (status.equals("32")) {// 32无法废票; cnit++; children.put("cnit", cnit); }else if (status.equals("40")) {// 40申请改期 tafr++; children.put("tafr", tafr); }else if (status.equals("42")) {// 42无法改期 cbr++; children.put("cbr", cbr); }else if (status.equals("12")) {// 12出票失败 tdf++; children.put("tdf", tdf); }else if (status.equals("90")) {// 90平台退款 pfr++; children.put("pfr", pfr); } }else { children.put("wt", wt); children.put("ta", ta); children.put("ca", ca); children.put("it", it); children.put("nrt", nrt); children.put("cnrt", cnrt); children.put("cnit", cnit); children.put("tafr", tafr); children.put("cbr", cbr); children.put("tdf", tdf); children.put("pfr", pfr); } parent.put(item.getWorkid(), children); } } map.put("kfis", parent); map.put("workid", koi.getWorkid());// 搜索回显; return "/jsp/stat/kfworkday"; } }
页面使用的jsp所以咯el表达式:
<table class="caozuo" cellpadding="0" cellspacing="0" border="1"> <tr> <th>工号</th> <th>等待出票</th> <th>出票处理中</th> <th>更换编码</th> <th>废票</th> <th>正常退票</th> <th>无法退票</th> <th>无法废票</th> <th>改期</th> <th>无法改期</th> <th>出票失败</th> <th>平台退款</th> </tr> <j:choose> <j:when test="${kfis.size() > 0 && not empty kfis }"> <j:forEach items="${kfis.keySet() }" var="key" varStatus="countStatus"> <tr> <td>${key }</td> <td>${kfis.get(key).get("wt") }<j:if test="${empty kfis.get(key).get(‘wt‘)}">0</j:if></td> <td>${kfis.get(key).get("ta") }<j:if test="${empty kfis.get(key).get(‘ta‘)}">0</j:if></td> <td>${kfis.get(key).get("ca") }<j:if test="${empty kfis.get(key).get(‘ca‘)}">0</j:if></td> <td>${kfis.get(key).get("it") }<j:if test="${empty kfis.get(key).get(‘it‘)}">0</j:if></td> <td>${kfis.get(key).get("nrt") }<j:if test="${empty kfis.get(key).get(‘nrt‘)}">0</j:if></td> <td>${kfis.get(key).get("cnrt") }<j:if test="${empty kfis.get(key).get(‘cnrt‘)}">0</j:if></td> <td>${kfis.get(key).get("cnit") }<j:if test="${empty kfis.get(key).get(‘cnit‘)}">0</j:if></td> <td>${kfis.get(key).get("tafr") }<j:if test="${empty kfis.get(key).get(‘tafr‘)}">0</j:if></td> <td>${kfis.get(key).get("cbr") }<j:if test="${empty kfis.get(key).get(‘cbr‘)}">0</j:if></td> <td>${kfis.get(key).get("tdf") }<j:if test="${empty kfis.get(key).get(‘tdf‘)}">0</j:if></td> <td>${kfis.get(key).get("pfr") }<j:if test="${kfis.get(key).get(‘pfr‘) == null}">0</j:if></td> </tr> </j:forEach> </j:when> <j:otherwise> <tr><td colspan="12">当前记录为空</td></tr> </j:otherwise> </j:choose> </table>
最终效果:
同一表中数据统计, 重复只显示一条, 根据一个字段显示多个统计结果;
标签:
原文地址:http://www.cnblogs.com/YingYue/p/4756796.html