oracle 行列转换的运用

问题:

员工表: A(E_ID,NAME,) 部门表:  B(D_ID,D_NAME) 员工与部门关系:C(ID,E_ID,D_ID)

SELECT  A.E_ID,A.NAME ,B.D_NAME FROM A INNER JOIN C ON A.E_ID=C.E_ID INNER JOIN B ON B.D_ID=C.D_ID;

这样查处的记录会出现,

1,张三,研发部

1,张三,市场部

2,李四,销售部

我想查询结果显示成这样:

1,张三,研发部|市场部 2,李四,销售部 3 ...

SQL 怎么写?

解:

方法1

SELECT A.E_ID, A.NAME, REPLACE(WM_CONCAT(B.D_NAME), ‘,‘, ‘|‘) D_NAME
  FROM A
 INNER JOIN C   ON A.E_ID = C.E_ID
 INNER JOIN B   ON B.D_ID = C.D_ID
 GROUP BY A.E_ID, A.NAME

  

方法2:

SELECT A.E_ID, A.NAME, listagg(B.D_NAME,‘,‘) within GROUP (ORDER BY B.D_NAME)D_NAME
 FROM A  INNER JOIN C     ON A.E_ID = C.E_ID
 INNER JOIN B   ON B.D_ID = C.D_ID
 GROUP BY A.E_ID, A.NAME
时间: 2024-12-09 16:39:34

oracle 行列转换的运用的相关文章

oracle 行列转换 列名数字

oracle 行列转换列名如果是数字,用双引号包住  如下: --  建表 create table workinfo(wid integer primary key,sid integer ,CONSTRAINT sid foreign key(sid) references student(sid),city nvarchar2(100),-- 就业城市wage number(10,2),-- 月薪workdate date,-- 就业时间eid integer ,CONSTRAINT ei

oracle 行列转换

最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case when.. then.. else.. end) as 语句 这种也可能是我们遇到的第一个行列转换的方法.巧妙的利用汇总和判断语句就可以解决的. 先看一个简单的基础表:如下图 create table STUDENT (   STUNAME      NVARCHAR2(50),   SUBJECTN

Oracle行列转换的思考与总结

最近几天一直在弄Oracle-SQL的问题,涉及到了一些平时没有用到的东西,也因此而在这里郁闷了好久.现在问题得到了解决虽说不算完美.但是还是和大家一起分享一下. 行列转换之一:sum(case when.. then.. else.. end) as 语句 这种也可能是我们遇到的第一个行列转换的方法.巧妙的利用汇总和判断语句就可以解决的. 先看一个简单的基础表:如下图 create table STUDENT(  STUNAME      NVARCHAR2(50),  SUBJECTNAME

oracle行列转换总结-转载自ITPUB

原贴地址:http://www.itpub.net/thread-1017026-1-1.html 谢谢原贴大人 最近论坛很多人提的问题都与行列转换有关系,所以我对行列转换的相关知识做了一个总结, 希望对大家有所帮助,同时有何错疏,恳请大家指出, 我也是在写作过程中学习,算是一起和大家学习吧. 行列转换包括以下六种情况: *列转行 *行转列 *多列转换成字符串 *多行转换成字符串 *字符串转换成多列 *字符串转换成多行 下面分别进行举例介绍. 首先声明一点,有些例子需要如下10g及以后才有的知识

Oracle 行列转换 总结 (转)

行列转换包括以下六种情况: 1. 列转行 2. 行转列 3. 多列转换成字符串 4. 多行转换成字符串 5. 字符串转换成多列 6. 字符串转换成多行 首先声明,有些例子需要如下10g及以后才有的知识: A. 掌握model子句, B. 正则表达式 C. 加强的层次查询 1.列转行CREATE TABLE t_col_row( ID INT, c1 VARCHAR2(10), c2 VARCHAR2(10), c3 VARCHAR2(10)); INSERT INTO t_col_row VAL

oracle行列转换函数的使用

racle 10g wmsys.wm_concat行列转换函数的使用: 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 1.把结果按分组用逗号分割,以一行打印出来.(如果需要换其它的可以用replace函数:replace(wm_concat(name),',','|')) select t.u_id, wmsys.wm_concat(t.goods), wmsys.wm_concat

[Oracle]行列转换(行合并与拆分)

使用wmsys.wm_concat 实现行合并 在 Oracle  中, 将某一个栏位的多行数据转换成使用逗号风格的一行显示,可以使用函数  wmsys.wm_concat 达成. 这个在上一篇 oracle内置函数 wmsys.wm_concat使用 中也介绍到. 参考这一段 " Case 1: 列转换行. 以一行显示所有员工的名字 select wmsys.wm_concat(NAME) from employee; 结果: user1,user2 " 现在有个问题, 反过来如何显

交叉表、行列转换和交叉查询经典

交叉表.行列转换和交叉查询经典分类: SqlServer 2007-12-05 16:01 6776人阅读 评论(1) 收藏 举报sqlsqlserverinsertnull产品sql server交叉表.行列转换和交叉查询经典一.什么是交叉表“交叉表”对象是一个网格,用来根据指定的条件返回值.数据显示在压缩行和列中.这种格式易于比较数据并辨别其趋势.它由三个元素组成: 行列摘要字段“交叉表”中的行沿水平方向延伸(从一侧到另一侧).在上面的示例中,“手套”(Gloves) 是一行.“交叉表”中的

oracle高级SQL(四)--SQL行列转换专题2

[上一专题]  行列转换1  -- PIVOT与UNPIVOT函数的介绍 实现案例 1001 lufei 1001 shanzhi 1001 namei 1001 qiaoba 实现效果如下: 1001 lufei,shanzhi,namei,qiaoba 典型的行列转换:实现这种方法有很多. 其中oracle11g之后提供了listagg函数;用来实现上面的效果最好不过了:我们来看下listagg语法 listagg函数的语法结构如下: >listagg( [,]) within group