oracle 列转行函数listagg、判断函数decode

1、decode

使用decode判断字符串是否一样

DECODE(value,if1,then1,if2,then2,if3,then3,...,else)

decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值)

某些场景可以代替case when

2、listagg

首先看下数据情况

想把这个人的阶段列转成一行分隔显示使用listagg函数

select    listagg (decode(sts,‘A‘,coll_stage),‘,‘) within group (order by coll_stage desc) coll_stage_a,
    listagg (decode(sts,‘I‘,coll_stage),‘,‘) within group (order by coll_stage desc) coll_stage_i,
    listagg (coll_stage,‘,‘) within group (order by coll_stage desc) coll_stage_all
from lc_contcoll_rel where cont_no = ‘HT90201804121600006690493‘ group by cont_no

结果:

原文地址:https://www.cnblogs.com/pluto-yang/p/12573859.html

时间: 2024-11-05 16:10:20

oracle 列转行函数listagg、判断函数decode的相关文章

oracle列转行 WM_CONCAT LISTAGG

开发给个SQL说给某个条件时报ORA-22922 代码段: 1 SELECT 袋号, 2 SUM(实际重量) AS 实际重量, 3 SUM(材积重量) AS 材积重量, 4 COUNT(运单号) AS 件数, 5 TO_CHAR(WMSYS.WM_CONCAT(运单号)) AS 运单编号 6 FROM TBL 7 GROUP BY 袋号 修改成如下后解决: 1 SELECT 袋号, 2 SUM(实际重量) AS 实际重量, 3 SUM(材积重量) AS 材积重量, 4 COUNT(运单号) AS

Oracle列转行函数版本不兼容解决方案

业务场景 本博客记录一下Oracle列转行函数在Oracle11的一些不兼容问题,vm_concat在一些业务场景是必须的.不过这个函数使用要谨慎,底层实现应该也是group by等等实现的,性能并不是特别好.这个函数在Oracle12是没有的,在Oracle11是不太兼容的,Oracle10可以正常使用.最近遇到这个问题,网上博客很多都写到了自定义列转行函数的办法去解决.但是这种办法并不一定适用所有的业务场景.我并没有采用.不过有些场景还是可以使用的. 网上优秀例子 下面是网络记录比较详细的例

Oracle 列转行函数 Listagg()

这是一个Oracle的列转行函数:LISTAGG() 先看示例代码: Sql代码   with temp as( select 'China' nation ,'Guangzhou' city from dual union all select 'China' nation ,'Shanghai' city from dual union all select 'China' nation ,'Beijing' city from dual union all select 'USA' nat

oracle 列转行

with temp as( select 'A01' nation ,1 as S1,2 as S2, 3 as S3 from dual union all select 'A02' nation ,null as S1,5 as S2, 6 as S3 from dual ) select * from temp unpivot(Qty for Sizes in(s1,s2,s3))

oracle 行转列、列转行

最近做数据处理,经常遇到需要行转列.列转行的场景,记录个非常简单实用的oracle  列转行.行转的列方法 1.行转列,基础数据如下 做行转列处理 处理SQL select user_name,max(date_201501) as date_201501,max(date_201502),max(date_201503),max(date_201504) from (select t.user_name,case when t.acct_date = '201501' then t.flow

oracle listagg函数、lag函数、lead函数 实例

Oracle大师Thomas Kyte在他的经典著作中,反复强调过一个实现需求方案选取顺序: “如果你可以使用一句SQL解决的需求,就使用一句SQL:如果不可以,就考虑PL/SQL是否可以:如果PL/SQL实现不了,就考虑Java存储过程是否可以:如果这些都不可能实现,那么就需要考虑你是否真的需要实现这个需求.” 各个关系型DBMS产品都在遵守关系型数据库模型的基本体系架构,遵循通用的SQL国际规范.同时,为了更好地配合自身数据库实现的特征,以及提供更加丰富的功能,各个DBMS纷纷在标准SQL上

Oracle nvl、nvl2、nullif、decode、case函数详解

1.NVL函数 nvl(expr1,expr2),如果expr1为空,则返回expr2: 2.NVL2函数 nvl2(expr1,expr2,expr3),如果expr1为空,则返回expr3,否则返回expr2: 3.NULLIF函数 nullif(expr1,expr2),如果expr1=expr2,返回空,否则返回expr1,要求两个表达式数据类型一致: SQL> insert into t1 values(9); 说明1:NVL和NVL2函数在进行空值判断的时候,都会将函数内的表达式执行

Mysql group_concat函数列转行,与行转列

1.正常情况. SELECT JoinEventIds from user 2.使用group_concat函数得到列转行. select group_concat(JoinEventIds) from user 3.使用SUBSTRING_INDEX和CROSS JOIN将列里面的的数字都拆分出来,把一行变成一列. 方法一(网上查询的方法): 建配置表: CREATE TABLE digits (digit INT(1)); INSERT INTO digits VALUES (0), (1)

oracle函数listagg的使用说明(分组后连接字段)

关于oracle函数listagg的使用说明 工作中经常遇到客户提出这样的需求,希望在汇总合并中,能够把日期逐个枚举出来. 如图,原始数据是这样的: 客户希望能够实现这样的汇总合并: 那么通常我会使用listagg这个函数,但是好多网上都是系统的全面的介绍listagg这个函数的使用方法,看起来很费力气.在这里我简明扼要的说明一下 实现这个需求的语句是这样的: select name, listagg(ddate,' / ') within group (order by name) as dd