zoukankan      html  css  js  c++  java
  • 【SQL】列转字符串函数

    还是这个需求

    主界面的列表表格是直接在后台用SQL查出来的

    public String getQuerySql(ElemBean condition, List<Object> params) {
        StringBuilder sql = new StringBuilder();
        sql.append("SELECT * FROM (SELECT T.ID, T.MAINTAIN_ID, T.VIN, T.VEHICLE_MODEL_NAME, 
    ");
        sql.append("       T.VEHICLE_MODEL_CODE, T.RECOMMEND_ASC_AREA, T.VEHICLE_NO, 
    ");
        sql.append("       T.CLAIMANT_NAME, T.CTO_NAME, T.CTO_PHONE, 
    "); // 2021年4月27日 11点30分 daizhizhou
        sql.append("       T.CREATED_AT, T.STATUS, T.RECOMMEND_ASC_CODE, T.RECOMMEND_ASC_NAME, 
    ");
        sql.append("       T.NAME, T.PHONE, T.MILEAGE, T.MANUFACTURING_DATE, T.PRODUCTION_DATE, T.FIRST_CLOSE_DATE, 
    ");
        sql.append("       T.FIRST_SAVE_DATE, (SELECT MAX(CREATED_AT) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID AND APPLY_STATUS=56771003) APPLY_CLOSE_DATE, 
    ");
    
    
        sql.append("       (SELECT MAX(CREATED_AT) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID AND APPLY_STATUS=56771006) APPLY_OTHER_DATE, 
    ");
        sql.append("       (SELECT APPLY_STATUS FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_APPLY_STATUS, 
    ");
        sql.append("       (SELECT IF(APPLY_STATUS=56771003, APPLY_CLOSE_REMARK, APPLY_OTHER_ASC_REMARK) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_APPLY_REMARK, 
    ");
        sql.append("       (SELECT AUDIT_REMARK FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_AUDIT_REMAR, 
    ");
        sql.append("       (SELECT GROUP_CONCAT(FAULT_DESC) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_DESC, 
    ");
        sql.append("       (SELECT GROUP_CONCAT(CORRECTIVE_ACTION) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) CORRECTIVE_ACTION, 
    ");
        
        sql.append("       (SELECT GROUP_CONCAT(FAULT_CODE) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_CODE, 
    ");
        sql.append("       (SELECT GROUP_CONCAT(FAULT_LEVEL) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_LEVEL 
    ");
        sql.append("  FROM TT_FORESEE_MAINTAIN_ORDER T 
    ");
        sql.append("  LEFT JOIN TM_VEHICLE_BASE TV ON TV.VIN = T.VIN 
    ");
        sql.append("  LEFT JOIN VW_PRODUCT VP ON VP.MODEL_CODE = TV.MODEL_CODE 
    ");
        sql.append(" WHERE 1 = 1 
    ");
        
        UserInfoDto userInfo = UserUtil.getSessionUser();
        if(userInfo.getOrgType().intValue() == Constant.ORG_TYPE_10 || userInfo.getOrgType().intValue() == Constant.ORG_TYPE_13) {
            sql.append("     AND T.RECOMMEND_ASC_CODE = ? 
    ");
            params.add(userInfo.getOrgCode());
        }else if(!UserUtil.isFactoryType(userInfo.getOrgType())) {
            sql.append("     AND 1<>1 
    ");
        }
        if(!condition.isNull("vehicleModelCode")) {
            sql.append("     AND T.VEHICLE_MODEL_CODE LIKE ? 
    ");
            params.add("%"+condition.getStr("vehicleModelCode")+"%");
        }
        if(!condition.isNull("area")) {
            sql.append("     AND FIND_IN_SET(T.RECOMMEND_ASC_AREA,?)  
    ");
            params.add("%"+condition.getStr("area")+"%");
        }
        if(!condition.isNull("vin")) {
            sql.append("     AND T.VIN LIKE ? 
    ");
            params.add("%"+condition.getStr("vin")+"%");
        }
        if(!condition.isNull("vehicleNo")) {
            sql.append("     AND T.VEHICLE_NO LIKE ? 
    ");
            params.add("%"+condition.getStr("vehicleNo")+"%");
        }
        if(!condition.isNull("createStardate")) {
            sql.append("     AND T.CREATED_AT >= ? 
    ");
            params.add(condition.getStr("createStardate"));
        }
        if(!condition.isNull("createEndate")) {
            sql.append("     AND T.CREATED_AT < DATE_ADD(?, INTERVAL 1 DAY) 
    ");
            params.add(condition.getStr("createEndate"));
        }
        if(!condition.isNull("maintainId")) {
            sql.append("     AND T.MAINTAIN_ID LIKE ? 
    ");
            params.add("%"+condition.getStr("maintainId")+"%");
        }
        if(!condition.isNull("status")) {
            sql.append("     AND T.STATUS = ? 
    ");
            params.add(condition.getInt("status"));
        }
        if(!condition.isNull("recommendAscCode")) {
            sql.append("     AND T.RECOMMEND_ASC_CODE LIKE ? 
    ");
            params.add("%"+condition.getStr("recommendAscCode")+"%");
        }
        if(!condition.isNull("recommendAscName")) {
            sql.append("     AND T.RECOMMEND_ASC_NAME LIKE ? 
    ");
            params.add("%"+condition.getStr("recommendAscName")+"%");
        }
        if(!condition.isNull("phone")) {
            sql.append("     AND T.PHONE LIKE ? 
    ");
            params.add("%"+condition.getStr("phone")+"%");
        }
        if(!condition.isNull("faultCode")) {
            sql.append("     AND T.ID IN (SELECT ORDER_ID FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL WHERE FAULT_CODE LIKE ?) 
    ");
            params.add("%"+condition.getStr("faultCode")+"%");
        }
        if(!condition.isNull("faultLevel")) {
            sql.append("     AND T.ID IN (SELECT ORDER_ID FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL WHERE FAULT_LEVEL = ?) 
    ");
            params.add(condition.getStr("faultLevel"));
        }
        sql.append(scSqlUtil.getCyBrandWhereSql("vp.BRAND_ID", params));
        sql.append("     ) A 
    ");
        return sql.toString();
    }

    这4个字段是从employee进行取值的,这意味着需要直接从SQL中处理好直接带给程序【后台无法处理】

    联表 是主表的ID关联 其他表的外键 ORDER_ID:

     WHERE TI1.ORDER_ID = T.ID 

    合并SQL,最后发现,下面的SQL已经这么做了

    --         (SELECT group_concat(`NAME` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CLAIMANT_NAME,
    --         (SELECT group_concat(`NAME` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CTO_NAME,
    --         (SELECT group_concat(`PHONE` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CTO_PHONE,
  • 相关阅读:
    7、单向一对多的关联关系(1的一方有n的一方的集合属性,n的一方却没有1的一方的引用)
    6、JPA_映射单向多对一的关联关系(n的一方有1的引用,1的一方没有n的集合属性)
    解决ubuntu的screen已经处于Attached状态,无法再打开窗口
    关于.ssh出错,无法从远程git仓库拉代码
    给程序添加git commit信息
    ubuntu服务器常用命令
    uint128_t 添加 c++ 重载类型强制转换
    Visual Studio 查看宏展开
    EOS dice移到1.8版本的修改汇总
    ubuntu 添加字体
  • 原文地址:https://www.cnblogs.com/mindzone/p/14718558.html
Copyright © 2011-2022 走看看