功能截图

之前做法,先查询每一行的前4个字段,然后动态拼接出其他的字段,效率极低,以下是优化后的代码,供参考,只提供一个优化思路,授人以鱼不如授人以渔

后台Sql语句优化(语法仅支持Oracle)

SELECT PROJ_NO,
       ALL_SECTION,
       GRAND_SEC,
       SPCID,
       FIR_SCH_ID_1166,
       BEGIN_DATE_1166,
       END_DATE_1166,
       FLOAT_CYC_1166,
       FIR_SCH_ID_1167,
       BEGIN_DATE_1167,
       END_DATE_1167,
       FLOAT_CYC_1167,
       FIR_SCH_ID_1168,
       BEGIN_DATE_1168,
       END_DATE_1168,
       FLOAT_CYC_1168,
       FIR_SCH_ID_1169,
       BEGIN_DATE_1169,
       END_DATE_1169,
       FLOAT_CYC_1169,
       FIR_SCH_ID_1170,
       BEGIN_DATE_1170,
       END_DATE_1170,
       FLOAT_CYC_1170,
       FIR_SCH_ID_1171,
       BEGIN_DATE_1171,
       END_DATE_1171,
       FLOAT_CYC_1171,
       FIR_SCH_ID_1172,
       BEGIN_DATE_1172,
       END_DATE_1172,
       FLOAT_CYC_1172,
       FIR_SCH_ID_1173,
       BEGIN_DATE_1173,
       END_DATE_1173,
       FLOAT_CYC_1173,
       FIR_SCH_ID_1174,
       BEGIN_DATE_1174,
       END_DATE_1174,
       FLOAT_CYC_1174,
       FIR_SCH_ID_1175,
       BEGIN_DATE_1175,
       END_DATE_1175,
       FLOAT_CYC_1175,
       FIR_SCH_ID_1176,
       BEGIN_DATE_1176,
       END_DATE_1176,
       FLOAT_CYC_1176,
       FIR_SCH_ID_1177,
       BEGIN_DATE_1177,
       END_DATE_1177,
       FLOAT_CYC_1177,
       FIR_SCH_ID_1178,
       BEGIN_DATE_1178,
       END_DATE_1178,
       FLOAT_CYC_1178,
       FIR_SCH_ID_1179,
       BEGIN_DATE_1179,
       END_DATE_1179,
       FLOAT_CYC_1179,
       ALL_SECTION_BEGIN_DATE,
       ALL_SECTION_BEGIN_DATE2
  FROM (SELECT Y.PROJ_NO,
               Y.SPCID,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1166,
               , Y.BEGIN_DATE)) BEGIN_DATE_1166,
               , Y.END_DATE)) END_DATE_1166,
               , Y.FLOAT_CYC)) FLOAT_CYC_1166,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1167,
               , Y.BEGIN_DATE)) BEGIN_DATE_1167,
               , Y.END_DATE)) END_DATE_1167,
               , Y.FLOAT_CYC)) FLOAT_CYC_1167,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1168,
               , Y.BEGIN_DATE)) BEGIN_DATE_1168,
               , Y.END_DATE)) END_DATE_1168,
               , Y.FLOAT_CYC)) FLOAT_CYC_1168,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1169,
               , Y.BEGIN_DATE)) BEGIN_DATE_1169,
               , Y.END_DATE)) END_DATE_1169,
               , Y.FLOAT_CYC)) FLOAT_CYC_1169,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1170,
               , Y.BEGIN_DATE)) BEGIN_DATE_1170,
               , Y.END_DATE)) END_DATE_1170,
               , Y.FLOAT_CYC)) FLOAT_CYC_1170,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1171,
               , Y.BEGIN_DATE)) BEGIN_DATE_1171,
               , Y.END_DATE)) END_DATE_1171,
               , Y.FLOAT_CYC)) FLOAT_CYC_1171,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1172,
               , Y.BEGIN_DATE)) BEGIN_DATE_1172,
               , Y.END_DATE)) END_DATE_1172,
               , Y.FLOAT_CYC)) FLOAT_CYC_1172,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1173,
               , Y.BEGIN_DATE)) BEGIN_DATE_1173,
               , Y.END_DATE)) END_DATE_1173,
               , Y.FLOAT_CYC)) FLOAT_CYC_1173,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1174,
               , Y.BEGIN_DATE)) BEGIN_DATE_1174,
               , Y.END_DATE)) END_DATE_1174,
               , Y.FLOAT_CYC)) FLOAT_CYC_1174,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1175,
               , Y.BEGIN_DATE)) BEGIN_DATE_1175,
               , Y.END_DATE)) END_DATE_1175,
               , Y.FLOAT_CYC)) FLOAT_CYC_1175,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1176,
               , Y.BEGIN_DATE)) BEGIN_DATE_1176,
               , Y.END_DATE)) END_DATE_1176,
               , Y.FLOAT_CYC)) FLOAT_CYC_1176,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1177,
               , Y.BEGIN_DATE)) BEGIN_DATE_1177,
               , Y.END_DATE)) END_DATE_1177,
               , Y.FLOAT_CYC)) FLOAT_CYC_1177,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1178,
               , Y.BEGIN_DATE)) BEGIN_DATE_1178,
               , Y.END_DATE)) END_DATE_1178,
               , Y.FLOAT_CYC)) FLOAT_CYC_1178,
               , Y.FIR_SCH_ID)) FIR_SCH_ID_1179,
               , Y.BEGIN_DATE)) BEGIN_DATE_1179,
               , Y.END_DATE)) END_DATE_1179,
               , Y.FLOAT_CYC)) FLOAT_CYC_1179,
               Y.ALL_SECTION,
               Y.ALL_SECTION_BEGIN_DATE,
               Y.ALL_SECTION_BEGIN_DATE2,
               Y.GRAND_SEC
          FROM (SELECT FSI.PROJ_NO,
                       FSI.SPCID,
                       FSI.STANDA_SCHEDULE_NODE_ID,
                       SSN.NODE_NAME,
                       SSN.NODE_SEQ,
                       FSI.BEGIN_DATE,
                       FSI.END_DATE,
                       FSI.FLOAT_CYC,
                       FSI.ALL_SECTION,
                       FSI.ALL_SECTION_BEGIN_DATE,
                       FSI.ALL_SECTION_BEGIN_DATE2,
                       FSI.FIR_SCH_ID,
                       FSI.GRAND_SEC
                  FROM FIRST_SCHEDULE_INFO_VIEW FSI
                  LEFT JOIN STANDA_SCHEDULE_NODE SSN
                    ON SSN.STANDA_SCHEDULE_NODE_ID =
                       FSI.STANDA_SCHEDULE_NODE_ID

                   ) Y
         GROUP BY Y.PROJ_NO,
                  Y.SPCID,
                  Y.ALL_SECTION,
                  Y.ALL_SECTION_BEGIN_DATE,
                  Y.GRAND_SEC,
                  Y.ALL_SECTION_BEGIN_DATE2)

后台逻辑,拼接Sql语句

                string ssnSql = string.Format("SELECT T.* FROM STANDA_SCHEDULE_NODE T WHERE T.STANDA_SCHEDULE_ID = {1} AND T.IS_DEL = '8' {0} ORDER BY T.NODE_SEQ", StringUtil.isNotNullOrBlank(ssnIds) ? "AND T.STANDA_SCHEDULE_NODE_ID IN (" + ssnIds.Replace(DbUtil.colSplit, ',') + ")" : "", PlanUtil.FirstScheduleS);
                DataTable ssndt = DbUtil.QueryDT(ssnSql);
                StringBuilder sb = new StringBuilder();
                )
                {
                    List<Standa_Schedule_Node> ssnList = BeanUtil.ToEntity<Standa_Schedule_Node>(ssndt);

                    foreach (Standa_Schedule_Node ssn in ssnList)
                    {
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FIR_SCH_ID)) FIR_SCH_ID_{0},", ssn.Standa_Schedule_Node_Id));
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.BEGIN_DATE)) BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id));
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.END_DATE)) END_DATE_{0},", ssn.Standa_Schedule_Node_Id));
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.FLOAT_CYC)) FLOAT_CYC_{0},", ssn.Standa_Schedule_Node_Id));
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_BEGIN_DATE)) E_BEGIN_DATE_{0},", ssn.Standa_Schedule_Node_Id));
                        sb.Append(string.Format("MAX(DECODE(Y.STANDA_SCHEDULE_NODE_ID, {0}, Y.E_END_DATE)) E_END_DATE_{0},", ssn.Standa_Schedule_Node_Id));
                    }
                }
                string conditionSql = "";
                conditionSql = sb.ToString();

                string querySql = @"SELECT {2}
  FROM (SELECT Y.PROJ_NO,
               Y.SPCID,
               {0} Y.ALL_SECTION,
               Y.ALL_SECTION_BEGIN_DATE,
               Y.ALL_SECTION_BEGIN_DATE2,
               Y.GRAND_SEC
          FROM (SELECT FSI.PROJ_NO,
                       FSI.SPCID,
                       FSI.STANDA_SCHEDULE_NODE_ID,
                       SSN.NODE_NAME,
                       SSN.NODE_SEQ,
                       FSI.BEGIN_DATE,
                       FSI.END_DATE,
                       FSI.E_BEGIN_DATE,
                       FSI.E_END_DATE,
                       FSI.FLOAT_CYC,
                       FSI.ALL_SECTION,
                       FSI.ALL_SECTION_BEGIN_DATE,
                       FSI.ALL_SECTION_BEGIN_DATE2,
                       FSI.FIR_SCH_ID,
                       FSI.GRAND_SEC
                  FROM FIRST_SCHEDULE_INFO_VIEW FSI
                  LEFT JOIN STANDA_SCHEDULE_NODE SSN
                    ON SSN.STANDA_SCHEDULE_NODE_ID =
                       FSI.STANDA_SCHEDULE_NODE_ID {1}) Y
         GROUP BY Y.PROJ_NO,
                  Y.SPCID,
                  Y.ALL_SECTION,
                  Y.ALL_SECTION_BEGIN_DATE,
                  Y.GRAND_SEC,
                  Y.ALL_SECTION_BEGIN_DATE2)";
                if (StringUtil.isNotNullOrBlank(v.Page) && v.Page != "-1")
                {
                    ;
                    v.Dt = DbUtil.Query(String.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*")), v.Start, v.Limit, ref total);
                    v.Total = total;
                }
                else
                {
                    v.Dt = DbUtil.QueryDT(string.Format(querySql, conditionSql, DbUtil.WHEREOTO + v.getCondition(), StringUtil.nullOrBlankTOStr(v.DFields, "*")));
                }
                return v.Dt;

Oracle Decode函数用法,可参考:https://www.cnblogs.com/Lightning-Kid/p/3954202.html

extjs 动态加载列表,优化思路的更多相关文章

  1. golang动态加载原生代码思路

    golang动态加载原生代码思路(非plugin,非so文件.使用mmap形式运行机器码,可释放) 1.用go tool objdump,可以看到任意函数的机器码.汇编指令.偏移.(go源码下面有一个 ...

  2. 关于实现Extjs动态加载类的方式实现

    Extjs4以前的版本没有动态加载类的方式,这样开发程序的时候加载很多的js会导致加载变慢,由于本人一直使用extjs3的版本进行开发,于是简单实现了一个动态加载类的管理器,使用方式与extjs4的方 ...

  3. Extjs-树 Ext.tree.TreePanel 动态加载数据

    先上效果图 1.说明Ext.tree.Panel 控件是树形控件,大家知道树形结构在软件开发过程中的应用是很广泛的,树形控件的数据有本地数据.服务器端返回的数据两种.对于本地数据的加载,在extjs的 ...

  4. shiro不重启动态加载权限

    最近一朋友让我帮他做一个后台权限管理的项目.我就在我原来的项目加加改改但是还是不理想,查了不少资料也走了不了弯路...... shiro基本的配置我就不多说了这个很简单自己查查资料就完成----下面是 ...

  5. JQuery加载列表实现动画滚动(自上而下挤)

    这个例子是jquery动态加载列表,并通过定时刷新,实现其循环滚动效果的一个例子. 1.HTML代码: <div class="fake-table"> <li ...

  6. ExtJs 4.2.1 复选框数据项动态加载(更新一下)

    最近在做博客项目,后台管理用的是ExtJs4.2.1版本,因为是初学所以在使用的时候也遇到不少的这样或那样的问题,也写了不少这方面的博客,今天要写的博客是关于复选框数据项动态的加载功能,以前也没用过, ...

  7. 移动端性能优化动态加载JS、CSS

    JS CODE (function() { /** * update: * 1.0 */ var version = "insure 1.1.0"; var Zepto = Zep ...

  8. ExtJs中动态加载机制研究(转)

    觉得写的太好了,怕弄丢了,转一下:http://extjs.org.cn/node/659 昨天我们team对于extjs的动态加载机制做了些深入研究,这里先share下controller加载的结果 ...

  9. ExtJs 通过分析源代码解决动态加载Controller的问题

    通过分析源代码解决动态加载Controller的问题 最近在研究ExtJs(4.2.0)的MVC开发模式,具体Extjs的MVC如何使用这里不解释,具体参见ExtJs的官方文档.这里要解决的问题是如何 ...

随机推荐

  1. Caffe源码-InsertSplits()函数

    InsertSplits()函数 在Net初始化的过程中,存在一个特殊的修改网络结构的操作,那就是当某层的输出blob对应多个其他层的输入blob时,会在输出blob所在层的后面插入一个新的Split ...

  2. javascript对url进行编码和解码

    这里总结下JavaScript对URL进行编码和解码的三个方法. 为什么要对URL进行编码和解码 只有[0-9[a-Z] $ - _ . + ! * ' ( ) ,]以及某些保留字,才能不经过编码直接 ...

  3. C#程序编写高质量代码改善的157个建议【10-12】[创建对象时需要考虑是否实现比较器、区别对待==和Equals]

    前言 建议10.创建对象时需要考虑是否实现比较器 建议11.区别对待==和Equals 建议12.重写Equals时也要重写GetHashCode 建议10.创建对象时需要考虑是否实现比较器 有对象的 ...

  4. Android utils 工具类之MD5加密 MD5Utils

    实际开发过程中,密码不会保存明文形式,容易被别人窃取. MD5加密是不可逆的加密算法,只能由明文转换成密文. 但是有些人通过将明文对应的密文保存在数据库中,进行查询破解密文.为防止这种解密,根据许多对 ...

  5. java打字游戏-一款快速提升java程序员打字速度的游戏(附源码)

    一.效果如图: 源码地址:https://gitee.com/hoosson/TYPER 纯干货,别忘了留个赞哦!

  6. 【linux命令】软连接和硬链接的区别(ln命令)

    Linux 文件系统把硬盘分为三个部分:超级块.inode 列表.数据区 inode 指示:该文件的数据存放在数据区的哪些块内.因为这个“映射”关系不能变更,因此,inode 相当于代表着文件本身.( ...

  7. Get提交数据过大,tomcat报错,信息: Error parsing HTTP request header Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level

    原因 get提交的数据过大,超过了默认值. 解决办法 get提交配置 设置tomcat的server.xml.找到我们启动的端口,一般是8080,增加maxHttpHeaderSize= " ...

  8. C#使用Linq to csv读取.csv文件数据2_处理含有非列名数据的方法(说明信息等)

    第一篇博客为:https://www.cnblogs.com/lxhbky/p/11884474.html 本文主要是为了解决上面博客遗留的一个含有不规范数据的一种方法,目前暂时没有从包里发现可以从第 ...

  9. English: Class logogram

    IT # this is a IT type ISP ANOTHER # following is another logogram LCD PDA

  10. 第03讲 fragment

    Fragment 官网文档:https://developer.android.google.cn/guide/components/fragments 什么是Fragment 在手机上,Activi ...