Oracle行列转置

两种简单的行列转置


1、固定列数的行列转换

student subject grade
--------- ----------
--------
student1 语文 80
student1 数学 70
student1 英语
60
student2 语文 90
student2 数学 80
student2 英语
100
……
转换为
语文 数学 英语
student1 80 70
60
student2 90 80 100
……
语句如下:


1 select student,
2 sum(decode(subject,‘语文‘, grade,null)) "语文",
3 sum(decode(subject,‘数学‘, grade,null)) "数学",
4 sum(decode(subject,‘英语‘, grade,null)) "英语"
5 from table
6 group by student;

2、不定列行列转换

c1 c2
--- -----------
1 我
1 是
1 谁
2

2 道
3 不
……
转换为
1 我是谁
2 知道
3 不

这一类型的转换必须借助于PL/SQL来完成,这里给一个例子


 1 CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)
2 RETURN VARCHAR2
3 IS
4 Col_c2 VARCHAR2(4000);
5 BEGIN
6 FOR cur IN (SELECT c2 FROM t WHERE c1=tmp_c1) LOOP
7 Col_c2 := Col_c2||cur.c2;
8 END LOOP;
9 Col_c2 := rtrim(Col_c2,1);
10 RETURN Col_c2;
11 END;
12 /
13 SQL> select distinct c1 ,get_c2(c1) cc2 from table;

3、

table  test
(id varchar2(10),address varchar2(10) );
数据如下:
 
      id 
      address
 
           11       
           
   aaaa
 
            11    
                
wwww
 
            11    
              
   dddd
 
            22    
              
   wsws
 
            22    
              
   cccc
 
 想得到这样的数据:
 
           id 
      address
 
               11 
                 
   aaaa,wwww,dddd          
  
 
               22 
                 
   wsws,cccc


1 select id, wmsys.wm_concat(address) address from test group by id;

Oracle行列转置

时间: 2024-07-30 10:19:49

Oracle行列转置的相关文章

Excel 行列转置 解决竖向拉,字母跟着递增的问题

今天工作中遇到需要将Excel行列转置涉及到的数据单元格一共几千个 查询网上说可以通过复制粘贴单元格,粘贴选项中转置一项实现,但是所涉及的sheet页中,数据格式和单元格格式各不一样,转置失败! 怎么做呢? 先看看查询Excel函数的结果: 首先看看INDERECT函数的定义:返回字符串所指定的索引 比如: 有了这个函数,解决当前问题的思路就是在竖向拖动的时候,能对应到INDIRECT("A1"),INDIRECT("B1"),INDIRECT("C1&q

Excel-怎样实现行列转置

有时候,我们为了某些需要,必须把工作表的行列进行转置的方式显示.重新输入很浪费时间,怎样简单的实现转置呢,强大的excel2007提供了此项功能,具体怎么做,下面看我来演示一下. 工具/原料 装有excel2007的电脑一台 步骤/方法 如图所示,选中要进行行列转置的单元格区域.   选择"开始"选项卡,在"剪贴板"组中单击"复制"图标. 步骤阅读   在工作表中选中目标粘贴区域的左上角单元格.如图所示.   单击"剪贴板"组

简化实现动态行列转置的SQL

动态行列转换的计算在实际业务中非经常见,网上各类技术论坛上都有讨论,比方以下这些问题: http://www.iteye.com/problems/87788 http://bbs.csdn.net/topics/390869577 http://bbs.csdn.net/topics/391000711 http://bbs.csdn.net/topics/391001035 http://bbs.csdn.net/topics/390888703 http://bbs.csdn.net/to

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

还在傻傻用Ctrl+C和Ctrl+V吗?这2个行列转置方法助你效率提80%!

Excel行转为列,列转为行的例子特别常见,以下这两个方法可以帮助你解决99%行列转置问题! 点击文章右上角给小编一个"关注"鼓励,谢谢您! 我们先来对比下面两张图片: 当下面表格的名字越来越多时,表格也就越来越来,查看也就越来越麻烦. 而下面这个表格显示看起来比较舒心,这也是我们平时制作表格的方式. 那么通过对比,我们知道哪个图片才是我们想要的.但是有时候别人发给我们的表格并不是我们想要的方式,而且数据量很大,这时该用什么方法变成我们想要的呢? 方法一:使用"选择性粘贴&q

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

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

oracle 行列转换

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

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行列互换 横表和纵表

/* 在实际使用sql工作中总会碰到将某一列的值放到标题中显示.就是总说的行列转换或者互换. 比如有如下数据: ID NAME KECHENG CHENGJI -- ---------- -------------------- ------- 1 a 语文 80 2 a 数学 70 3 b 语文 40 4 b 数学 100 5 c 语文 90 6 c 数学 92 那末我要求显示的结果是: NAME YUWEN SHUXUE ---------- ---------------------- -