Oracle中通过组内排序实现行转列(三) 1 纵表平铺 1.1 原数据 1.2 平铺 结果:每个班级按照年龄从小到大平铺为一行 select*from(selectrt.class, row_number()over(partitionbyrt.classorderbyrt.age) row_num, rt.sno, rt.snamefromrank_test rtorderbyrt.class, rt.age) pivot(max(sno) sno,max(sname)...
row_number()over(PARTITIONBYidORDERBYcn, cv) rnFROMt_row_col)GROUPBYID; 结果效果如下: 2)PL/SQL 适用范围:8i,9i,10g及以后版本 这种对于行值不固定的情况可以使用。 下面是我写的一个包,包中 p_rows_column_real用于前述的第一种不限定列的转换; p_rows_column用于前述的第二种不限定列的转换。
--listagg(合并多行的值为字符串,只用一列来显示) select status, count(*), listagg(risk_id, ',') within group (order by risk_id) from rp_risk group by status; select risk_id, status, listagg(risk_id, ',') within group (order by risk_id) over(partition by status) from rp_risk; ...
v_partition1 := rtrim(v_partition1, ','); v_partition2 := rtrim(v_partition2, ','); v_partition := v_partition || v_partition1 || ',' || v_partition2 || ', row_number() over (partition by ' || v_partition1 || ' order by ' || v_partition2 || ') rn from ' ||...
1)普通的聚合函数用group by分组,每个分组返回一个统计值。 2)分析函数采用partition by分组,并且每组每行都可以返回一个统计值。 (3)分析函数的形式 分析函数带有一个开窗函数over(),包含分析子句。 分析子句又由下面三部分组成: partition by:分组子句,表示分析函数的计算范围,不同的组互不相干; ...
行列转换包括以下六种情况:(1)列转行。(2)行转列。(3)多列转换成字符串。(4)多行转换成字符串。(5)字符串转换成多列。(6)字符串转换成多行。其中,重点是行转列和字符串转换成多行。 下面将分别对这几种情况举例来说明。 1、列转行 列转行就是将原表中的列名作为转换后的表的内容。列转行主要采用UNIO...
from (select a, b, row_number() over(partition by a order by b) rn fromtmp)startwith rn = 1connectby rn = prior rn + 1 and a =prior agroup bya;4.max+decodeselecta,max(decode(rn, 1, b, null)) || max(decode(rn, 2, ',' || b, null)) || max(decode(rn, 3, ',' ...
行转列就是将行数据内容作为列名。示例代码如下所示: 代码语言:javascript 复制 CREATE TABLE T_ROW_COL_LHR( NUM VARCHAR2(15 CHAR), NAME VARCHAR2(20 CHAR), SEX VARCHAR2(2 CHAR), CLASSES VARCHAR2(30 CHAR), COURSE_NAME VARCHAR2(50 CHAR) ); INSERT INTO T_ROW_COL_LHR(NUM,NAME,SEX,CLASSES...
2 先演示典型的用法 输入select LISTAGG(姓名,',') WITHIN GROUP(order by 号码 ) as 合并后 from TMP_EXP 即连接姓名字段,用逗号分隔,并按号码来进行排序。可以看到结果5行数据的姓名都合并到一列中了。3 还可以结合over(PARTITION BY 字段) 来对结果进行分组,执行语句select LISTAGG(姓名,&#...
GROUP BY S.Y ) --将结果集命名为A,把A行转列 SELECT A.Y, 1, A.Q1 FROM A UNION ALL SELECT A.Y, 2, A.Q2 FROM A UNION ALL SELECT A.Y, 3, A.Q3 FROM A UNION ALL SELECT A.Y, 4, A.Q4 FROM A 四、伪列 1.rownum:逻辑地址,一般用于构造条件,取序号; ...