码迷,mamicode.com
首页 > 其他好文 > 详细

同一表中数据统计, 重复只显示一条, 根据一个字段显示多个统计结果;

时间:2015-08-25 13:35:00      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:

从下面的表中根据标示统计出下面的页面效果, 本想用一条 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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!