`

DB2多行结果合并到一行排列输出(类似递归)

    博客分类:
  • SQL
 
阅读更多

需实现这样的功能,把同样接单量的人员姓名通过逗号分隔存到一个字段中

1 张三

1 李四

1 王五

处理后: 1  张三,李四,王五

 

-------------------------------------------分隔线----------------------------------------------

 

DW_RPT.TDM_ONLINESERVICE_CHAT_M

此表中数据如下:

 

 

处理后的结果如下:



 

 


WITH
CTE(CONN_CNT,OPER_NM,ORDER_CNT,ROWNUM)
AS
(
 SELECT
  CONN_CNT
  ,OPER_NM
  ,ORDER_CNT
  ,ROW_NUMBER() OVER (PARTITION BY CONN_CNT)
  FROM DW_RPT.TDM_ONLINESERVICE_CHAT_M
  ),
  CTE1(CONN_CNT,OPER_NM,ORDER_CNT,ROWNUM)
  AS
  (
   SELECT CONN_CNT,OPER_NM,ORDER_CNT,ROWNUM FROM CTE WHERE ROWNUM =1
   UNION ALL
   SELECT A.CONN_CNT,B.OPER_NM||','||A.OPER_NM,A.ORDER_CNT,B.ROWNUM+1 FROM CTE A,CTE1 B
   WHERE A.CONN_CNT = B.CONN_CNT AND A.ROWNUM = B.ROWNUM+1 
  )
  
  SELECT
	  DISTINCT D.CONN_CNT,
	  C.OPER_NM,
	  SUM(D.ORDER_CNT) ZDDS 
  FROM
  	DW_RPT.TDM_ONLINESERVICE_CHAT_M D
  INNER JOIN 
  (SELECT
  		A.CONN_CNT CONN_CNT,
  		A.OPER_NM OPER_NM 
  	FROM 
  		CTE1 A 
  	INNER JOIN
  		(SELECT 
  			CONN_CNT,
  			MAX(ROWNUM) ROWNUM 
  		FROM 
  			CTE1 
  		GROUP BY 
  		CONN_CNT) B
  ON A.CONN_CNT=B.CONN_CNT AND A.ROWNUM=B.ROWNUM) C 
  ON C.CONN_CNT=D.CONN_CNT  GROUP BY D.CONN_CNT,C.OPER_NM;

 

 


 

  • 大小: 14.9 KB
  • 大小: 8.7 KB
分享到:
评论
1 楼 zl520878 2016-07-25  
   

相关推荐

    sql实现多行合并一行

    在SQL中,有时候我们需要将查询结果中多行的数据合并成一行,这在处理某些特定的报表或数据分析时非常有用。这种技术通常被称为行合并或行聚合。在本例中,我们将探讨如何使用纯SQL实现这一功能,特别是针对Oracle...

    SQL语句行数据拆成多行及多行数据合并成一行的方法.docx

    ### SQL语句行数据拆成多行及多行数据合并成一行的方法 #### 一、SQL语句对一行(单元格)数据拆分成多行 在处理数据时,有时我们需要将一行数据拆分成多行,这在数据分析和报表制作中非常常见。下面将详细介绍几...

    oracle多行合并一行

    ### Oracle多行合并为一行的方法 在Oracle数据库中,有时候我们需要将多行数据合并成一行进行展示或处理,尤其是在报表生成、数据展示等场景中。本文将详细介绍如何使用Oracle纯SQL语句实现这一功能,并通过具体...

    案例排列组合(递归)

    2. 对于每个位置i(1到n-m+1),将剩余元素中的每一个放在当前位置,然后递归地生成剩下的m-1个元素的排列。 对于组合,递归策略如下: 1. 当m等于0或n时,返回一个空的组合。 2. 否则,选择第一个元素作为组合的...

    DB2递归实现

    在本文中,我们将使用一个实用的例子来描述如何将CONNECT BY和相关的伪列映射到DB2递归。我们将定义和填充一个雇员表,然后使用递归查询来回答一些问题,例如“谁是‘Goyal’直接或间接的属下?” 首先,我们需要...

    易语言递归法取排列组合例程

    3. 递归步骤:对于每个未被选取的元素,将其添加到当前组合中,并递归地对剩余元素进行组合计算,然后将结果合并到结果集合中。 在易语言中,这个过程可能会涉及数组操作、条件判断(如IF语句)和循环(如WHILE或...

    c++合并排序算法递归与非递归方式

    c++实现的合并排序算法 用递归和非递归两种方式实现的

    合并排序递归和非递归算法

    合并排序是一种基于分治策略的高效排序算法,它将大问题分解为小问题来解决,然后将小问题的结果合并以得到最终的解决方案。这个过程既可以用递归方式实现,也可以用非递归方式实现。 首先,让我们来看看递归版本的...

    排列 递归算法(递归求排列)

    排列的递归算法(递归求*排列*),很简洁。

    sql将多行数据生成一个一个字符患的递归脚本

    将多行数据生成一个一个字符患的递归脚本,方便,快捷。要顶哦。

    排列组合一个练习以及递归输出排列的PPT

    在这里,我们讨论的是排列组合的一个实践练习,使用递归算法输出排列的所有序列。递归算法是一种经典的算法设计方法,它通过将问题分解成更小的子问题,逐步解决问题的方式来解决问题。 在排列组合中,递归算法可以...

    递归实现十进制数从高位到低位依次输出

    递归实现十进制数从高位到低位依次输出 主要是我对递归算法的初步理解后试手制作希望对你有用

    自然合并排序(是对合并排序的非递归形式的一种改进)

    自然合并排序是对合并排序的非递归形式的一种改进,很好很有用

    递归求全排列.rar 递归求全排列.rar

    由于每次递归都会增加一个新的元素到已排序部分,因此这种方法的时间复杂度为O(n!),其中n是待排列元素的数量。尽管效率不高,但对于小规模的数据,这种方法仍然非常实用。 在实际应用中,递归全排列可以用于解决...

    DB2循环递归实例很有用的

    IBM DB2作为一款高性能的企业级数据库管理系统,提供了强大的循环递归查询功能,能够有效地解决这一类问题。 #### 二、循环递归查询概述 在DB2中,循环递归查询主要通过使用Common Table Expressions(CTEs,公共...

    DB2递归.docx

    - 递归查询的工作方式类似于分阶段的过程,每次递归都会基于前一次的结果生成新的结果,直到满足终止条件为止。 - 举例来说,考虑一个表示节点层级关系的NODE表,其中CHILD表示子节点,PARENT表示父节点。通过递归...

    在db2和oracle中的对树的递归查询语句

    DB2虽然没有直接提供类似Oracle的`CONNECT_BY`功能,但可以通过自连接和临时表的方式来实现递归查询。一个典型的例子是使用`WITH RECURSIVE`子句: ```sql WITH RECURSIVE employee_tree (level, employee_id, ...

    递归逆序输出字符串

    递归逆序输出字符串,代码自己看吧!!

Global site tag (gtag.js) - Google Analytics