`
taiwei
  • 浏览: 19119 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle的递归汇总让我头疼

阅读更多
初衷是做一个关于行政区划的递归汇总,但加上按阶段类别分类汇总的条件就感到很棘手,目前在iBatis里只好这么写
<select id="getRecordsByCondition" parameterClass ="java.util.Map" resultMap="Stats-result">
 <dynamic>	
	<isEqual property="LEVEL" compareValue="1">
		<![CDATA[
		select * from (
	select t.xzqhdm,'该地直辖' as xzqh,t.hs,t.fwmj,t.lgmsl,t.fssssl,t.rk,t.tdmj,t.jdlb
	 from YM_MV_NCYMCC t
	 ]]>
	 <isNotEmpty prepend=' where ' property='PXZQHDM'>               
	     	<![CDATA[t.xzqhdm=#PXZQHDM:VARCHAR#]]>
		</isNotEmpty>
		<isNotEmpty prepend=' and ' property='JDLB'>               
	     	<![CDATA[t.jdlb=#JDLB:CHAR#]]>
		</isNotEmpty>
		<![CDATA[
  		union all
		select t.xzqhdm,t.xzqh,	
       (select sum(hs)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) hs,
         (select sum(fwmj)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) fwmj,
         (select sum(lgmsl)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) lgmsl,
         (select sum(fssssl)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) fssssl,
         (select sum(rk)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) rk,     
         (select sum(tdmj)
         from YM_MV_NCYMCC t2
         start with t.xzqhdm=t2.xzqhdm and t2.jdlb=#JDLB#
         connect by prior xzqhdm=pxzqhdm and t2.jdlb=#JDLB#
         ) tdmj,
         t.jdlb 
	from YM_MV_NCYMCC t
		]]>
		<isNotEmpty prepend=' where ' property='XZQHDM'>               
	     	<![CDATA[t.XZQHDM like #XZQHDM:VARCHAR#]]>
		</isNotEmpty>
		<isNotEmpty prepend='and' property='PXZQHDM'>               
	     	<![CDATA[t.XZQHDM<>#PXZQHDM:VARCHAR#]]>
		</isNotEmpty>
		<isNotEmpty prepend=' and ' property='JDLB'>               
	     	<![CDATA[t.jdlb=#JDLB:CHAR#]]>
		</isNotEmpty>
		<![CDATA[
		) v
		]]>		
		<isNotEmpty prepend='and' property='QUERYVAL'>               
	     	<![CDATA[v.$FIELD$$operator$#QUERYVAL:NUMBER#]]>
		</isNotEmpty>		
	</isEqual>
 </dynamic>   
</select>

这个同样的递归执行了几遍,逻辑应该可以优化下,可我脑袋已经很难再转动了...
做点小结:
Select * from …. Where [结果过滤条件语句]
Start with  [and起始条件过滤语句]
Connect by prior [and中间记录过滤条件语句]
connect by prior xzqhdm=pxzqhdm 采用的是从根往叶汇总的方式

分享到:
评论

相关推荐

    Oracle 递归函数介绍

    Oracle 递归函数介绍 Oracle 递归函数是一种特殊的PL/SQL函数,可以用于解决复杂的树形结构查询问题。递归函数可以自我调用,以便遍历树形结构的每个节点,直到达到停止条件。 在 Oracle 中,递归函数的定义语法...

    oracle递归、迭代

    ### Oracle中的递归查询详解 #### 一、引言 在数据库管理中,处理具有层次结构的数据是一项常见的任务。例如,在组织结构、产品分类或文件系统等场景中,经常需要查询这种类型的层级数据。Oracle数据库提供了强大...

    oracle-递归查询地区名称

    oracle 递归调用 地区 ,用到的方法是 SYS_CONNECT_BY_PATH,可以扩展层级 名称

    Oracle递归树形结构查询功能

    Oracle数据库在处理树形结构数据时提供了强大的递归查询功能,这种特性对于组织结构、产品分类、层级菜单等场景的应用非常广泛。递归树形结构查询主要依赖于`CONNECT BY`和`PRIOR`关键字,它们允许我们构建复杂的...

    Oracle递归SQL学习

    Oracle数据库中的递归SQL是一种强大的工具,用于处理层次结构数据,如组织结构、分类树或者层级关系等。在本主题中,我们将深入探讨如何利用递归SQL在Oracle中展示一棵树形结构,以及如何根据父ID遍历所有的子ID。 ...

    oracle递归查询向上向下.txt

    oracle递归查询

    oracle递归查询的例子

    ### Oracle 递归查询详解及实例 #### 一、引言 在数据库查询语言中,Oracle 提供了一种强大的功能——递归查询,这在其他数据库系统如 SQL Server 中是缺失的功能。递归查询允许用户执行多级关联查询,特别适用于...

    使用over函数实现递归汇总计算

    ### 使用 OVER 函数实现递归汇总计算 #### Oracle 分析函数概述 自 Oracle 8.1.6 版本起,Oracle 数据库引入了分析函数(Analytic Functions),这是一种非常强大的工具,主要用于处理复杂的查询需求,尤其是在...

    递归查询菜单树,支持mysql,oracle

    这里,我们将深入探讨如何使用递归查询来构建菜单树,并特别关注在MySQL和Oracle这两种广泛使用的数据库系统中的实现。 首先,我们要理解什么是递归查询。递归查询是一种在数据库中处理层次数据的方法,它通过自身...

    Oracle递归查询

    ### Oracle递归查询详解 #### 一、引言 在处理具有层级结构的数据时,递归查询是一项非常有用的技能。例如,在处理组织架构、产品分类等数据时,我们经常需要查询某一节点及其所有子节点或者从某个节点追溯到其根...

    oracle层次汇总存储过程

    Oracle层次汇总存储过程是Oracle数据库中用于处理层级数据的一种高效技术。在数据库设计中,层级数据常见于组织结构、产品目录、地理位置等场景。Oracle提供了几种处理层级数据的方法,包括自连接、递归子查询、...

    dhtmlx tree 使用,与oracle递归查询的结合

    描述中提到,使用Oracle递归查询比在程序中实现递归查询速度更快。这是因为数据库系统通常针对这类操作进行了优化,能够更高效地处理层次结构数据。此外,数据库可以利用索引和其他优化技术,提高查询速度。而在应用...

    递归查询父子关系记录 oracle

    oracle 如何递归查询父子关系。经常用于构造树结构

    深入sql oracle递归查询

    Oracle数据库系统提供了两种主要的递归查询方法:一种是使用`WITH`子句配合`UNION ALL`,另一种是使用`START WITH`和`CONNECT BY`。这两种方法都能解决查询层次关系的问题,例如找出某个节点的所有子节点或父节点。 ...

    Oracle通过递归查询父子兄弟节点方法示例

    在Oracle数据库中,递归查询是一种强大的工具,用于处理层级数据结构,如组织结构、文件系统或树形关系。在本篇文章中,我们将探讨如何利用递归查询来查找父子兄弟节点,这对于理解和处理这类关系非常关键。 首先,...

    Oracle中的树状查询(递归查询)

    Oracle数据库系统在处理层次数据或树形结构时,提供了强大的工具——递归查询。递归查询允许我们在数据表中处理嵌套级别的数据,这在权限查询、组织结构、产品分类等场景中尤其常见。本文将深入探讨Oracle中的树状...

    广义表操作的递归汇总PPT学习教案.pptx

    广义表操作的递归汇总主要探讨了计算机科学中递归这一重要概念,以及如何在实际问题中应用递归。递归函数是指在定义或实现过程中直接或间接调用自身的函数。递归调用有两种方式:直接调用自身,或者通过其他函数间接...

    oracle SQL递归的使用详解

    在Oracle数据库中,SQL递归查询是一种非常有用的工具,它允许我们处理层级关系的数据,例如组织结构、树形目录或有上下级关联的数据。本文将详细介绍如何在Oracle中使用SQL递归语句,并通过示例进行说明。 首先,...

    oracle 使用递归的性能提示测试对比

    在Oracle数据库中,递归查询是一种强大的工具,用于处理层级数据结构,如组织结构、文件系统或树形结构。在给定的标题“oracle 使用递归的性能提示测试对比”和描述中,主要讨论了使用`START WITH...CONNECT BY ...

Global site tag (gtag.js) - Google Analytics