oracle语句集锦

1、行转列(PIVOT函数)

语法:

TABLE_SOURCE
PIVOT(聚合函数(value_column) FOR pivot_column IN( < column_list > ))

效果图:

--行转列
select *
  from SalesList pivot(
    max(salesNum) for shangPin in (    --shangPin 即要转成列的字段
        ‘上衣‘ as 上衣,                 --max(salesNum) 此处必须为聚合函数,
        ‘裤子‘ as 裤子,                 --in () 对要转成列的每一个值指定一个列名
        ‘袜子‘ as 袜子,
        ‘帽子‘ as 帽子
    )
  )
 where 1 = 1;  

注意 pivot里面必须使用聚合函数。

2、列转行(UNPIVOT函数)

语法:

TABLE_SOURCE
UNPIVOT(value_column FOR pivot_column IN( < column_list > ))
SELECT * from
(SELECT ‘罗飞‘ STU_NAME,
               ‘2001-2002‘ TERM,
               ‘90‘ 微积分,
               ‘88‘ 线性代数,
               ‘85‘ 数据结构,
               ‘70‘ 操作系统
          FROM DUAL) unpivot (scorce for type in(微积分,线性代数,数据结构,操作系统))

结果:

3、使用  listagg() WITHIN GROUP ()  将多行合并成一行

SELECT
    T .DEPTNO,
    listagg (T .ENAME, ‘,‘) WITHIN GROUP (ORDER BY T .ENAME) names
FROM
    SCOTT.EMP T
WHERE
    T .DEPTNO = ‘20‘
GROUP BY
    T .DEPTNO

4、字符串替换(translate函数)

语法:TRANSLATE(char, from, to)
用法:返回将出现在from中的每个字符替换为to中的相应字符以后的字符串。
     若from比to字符串长,那么在from中比to中多出的字符将会被删除。
     三个参数中有一个是空,返回值也将是空值。
select translate(‘abcdefga‘,‘abc‘,‘wo‘) 返回值 from dual;

返回值:

分析:

该语句要将‘abcdefga‘中的‘abc‘转换为‘wo‘,
            由于‘abc‘中‘a‘对应‘wo‘中的‘w‘,
            故将‘abcdefga‘中的‘a‘全部转换成‘w‘;
            而‘abc‘中‘b‘对应‘wo‘中的‘o‘,
            故将‘abcdefga‘中的‘b‘全部转换成‘o‘;
            ‘abc‘中的‘c‘在‘wo‘中没有与之对应的字符,
            故将‘abcdefga‘中的‘c‘全部删除;
            简单说来,就是将from中的字符转换为to中与之位置对应的字符,
            若to中找不到与之对应的字符,返回值中的该字符将会被删除。
            在实际的业务中,可以用来删除一些异常数据,
            比如表a中的一个字段t_no表示电话号码,
            而电话号码本身应该是一个由数字组成的字符串,
            为了删除那些含有非数字的异常数据,
           就用到了translate函数:
            SQL> delete from a,
                      where length(translate(trim(a.t_no),
                                            ‘0123456789‘ || a.t_no,
                                            ‘0123456789‘)) <> length(trim(a.t_no));

补充:replace也有类似的功能

语法:REPLACE(char, search_string,replacement_string)
用法:将char中的字符串search_string全部转换为字符串replacement_string。
select REPLACE(‘fgsgswsgs‘, ‘fk‘ ,‘j‘) 返回值 from dual;

select REPLACE(‘fgsgswsgs‘, ‘sg‘ ,‘eeerrrttt‘) 返回值 from dual;

分析

分析:第一个例子中由于‘fgsgswsgs‘中没有与‘fk‘匹配的字符串,
            故返回值仍然是‘fgsgswsgs‘;
            第二个例子中将‘fgsgswsgs‘中的字符串‘sg‘全部转换为‘eeerrrttt‘。
总结:综上所述,replace与translate都是替代函数,
         只不过replace针对的是字符串(完全匹配替换),而translate针对的是单个字符(位置匹配替换)。

原文地址:https://www.cnblogs.com/cq-yangzhou/p/11063473.html

时间: 2024-09-30 19:07:02

oracle语句集锦的相关文章

oracle 函数集锦

oracle的函數很多﹐特整理出來﹕ abs(m)  m的绝对值mod(m,n) m被n除后的余数power(m,n) m的n次方round(m[,n]) m四舍五入至小数点后n位的值(n缺省为0)trunc(m[,n]) m截断n位小数位的值(n缺省为0) 字符函数: initcap(st) 返回st将每个单词的首字母大写,所有其他字母小写lower(st) 返回st将每个单词的字母全部小写upper(st) 返回st将每个单词的字母全部大写concat(st1,st2)  返回st为st2接

Oracle语句

Oracle语句-基本查询 --清屏 SQL> host cls --当前用户 SQL> show user USER 为 "SCOTT" --当前用户的表 SQL> select * from tab; --员工表的结构 SQL> desc emp --查询所有的员工信息 SQL> select * from emp; --设置行宽 SQL> show linesize linesize 80 SQL> set linesize  150 -

SqlServer教程:经典SQL语句集锦

SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL-数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server --- 创建 备份数据的 deviceUSE

Oracle语句分类汇总

1.Oracle语句之数据定义语言(DDL) 1) CREATE TABLE   新建表 2) ALTER TABLE    修改表 3) TRUNCATE TABLE  清空表数据  举例:truncate table stu; 4) DROP TABLE      删除表 alter用法: 1.在表中新增字段: alter table stu add age int; 2.在表中删除字段: alter table stu drop column age; 3.对字段改名: alter tab

用oracle语句计算百分比

来公司第一天,也没什么事干,经理说今天需要把报表做出来,需要写几个oracle语句,用来查询各类别下的人 员数量和占总人数比例.如下图 统计人数到不是问题,关键是比例不知道该怎么去做,上网查了好几个方式都尝试过了,但还是没能弄出来,一 下午的时间全花在解决这个问题上了,最后在要下班的时候,我突然看到了oracle中聚合函数sum() over的使用,最 终使得问题得到了解决. 实现代码: SELECT(CASE WHEN db_psndoc.age<=30 THEN '30岁以上' WHEN d

oracle语句随笔

oracle语句随笔 dmp数据的导入. CREATE USER memsspc IDENTIFIED BY 123; --创建用户 GRANT CONNECT,RESOURCE,DBA TO memsspc; --赋值权限 --cmd 中导入命令 IMP memsspc/123@ORCL FILE=D:\yuanzhangliu_work\suzhou\spc.dmp FULL=Y;

oracle 语句创建表空间、用户、授权

/*分为四步 */ /*第1步:创建临时表空间 */ create temporary tablespace yuhang_temp tempfile 'D:\oracledata\yuhang_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; /*第2步:创建数据表空间 */ create tablespace yuhang_data logging datafile 'D:\or

oracle语句insert into select如何加后续插入条件

oracle语句insert into select如何加后续插入条件 2014-01-21 10:48匿名  分类:其他编程语言 | 浏览 2746 次 oracle中有批量插入语句insert into tableA (列1,列2,列3) select 列1,列2 from tableB.现在问题是这样的,tableA有3列,而通过最后的select语句所能获得的列只有列1和列2.但列3是非空的,所以插入时必须填写.请问在此如何在此语句后面加SQL以完成插入??小弟跪谢了!!! A中有3例,

53个Oracle语句优化规则详解(转)

Oracle sql 性能优化调整  1. 选用适合的ORACLE优化器        ORACLE的优化器共有3种:a. RULE (基于规则)   b. COST (基于成本) c. CHOOSE (选择性)    设置缺省的优化器,可以通过对init.ora文件中OPTIMIZER_MODE参数的各种声明,如RULE,COST,CHOOSE,ALL_ROWS,FIRST_ROWS . 你当然也在SQL句级或是会话(session)级对其进行覆盖.    为了使用基于成本的优化器(CBO,