listagg()行转列函数

本文深入探讨了Oracle数据库中的listagg函数,它用于将行数据转换为列。通过一个实际的示例,展示了如何使用listagg函数聚合和组合多个行值为单个字符串。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

--基础数据
DROP TABLE "ZYH_TEST";
CREATE TABLE "ZYH_TEST" (
  "ID" NUMBER(19) NOT NULL ,
  "NAME" VARCHAR2(255 BYTE) ,
  "CREATETIME" DATE ,
  "SCORE" NUMBER ,
  "CLASSID" VARCHAR2(255 BYTE) 
)

INSERT INTO "ZYH_TEST" VALUES ('1', 'allen', TO_DATE('2019-01-14 17:41:09', 'SYYYY-MM-DD HH24:MI:SS'), '98.5', '1');
INSERT INTO "ZYH_TEST" VALUES ('2', 'lee', TO_DATE('2019-01-14 17:41:37', 'SYYYY-MM-DD HH24:MI:SS'), '88.5', '1');
INSERT INTO "ZYH_TEST" VALUES ('3', 'me', TO_DATE('2019-01-14 17:41:52', 'SYYYY-MM-DD HH24:MI:SS'), '73', '1');
INSERT INTO "ZYH_TEST" VALUES ('4', 'let', TO_DATE('2019-01-14 17:42:03', 'SYYYY-MM-DD HH24:MI:SS'), '88', '1');
INSERT INTO "ZYH_TEST" VALUES ('5', 'met', TO_DATE('2019-01-14 17:42:16', 'SYYYY-MM-DD HH24:MI:SS'), '99', '1');
INSERT INTO "ZYH_TEST" VALUES ('6', 'ali', TO_DATE('2019-01-14 17:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '66', '1');
INSERT INTO "ZYH_TEST" VALUES ('7', 'avicii', TO_DATE('2019-01-15 12:41:09', 'SYYYY-MM-DD HH24:MI:SS'), '73', '2');
INSERT INTO "ZYH_TEST" VALUES ('8', 'martin', TO_DATE('2019-01-15 12:41:37', 'SYYYY-MM-DD HH24:MI:SS'), '76', '2');
INSERT INTO "ZYH_TEST" VALUES ('9', 'ajx', TO_DATE('2019-01-15 12:41:52', 'SYYYY-MM-DD HH24:MI:SS'), '91', '2');
INSERT INTO "ZYH_TEST" VALUES ('10', 'atlan', TO_DATE('2019-01-15 12:42:03', 'SYYYY-MM-DD HH24:MI:SS'), '60', '3');
INSERT INTO "ZYH_TEST" VALUES ('11', 'bill', TO_DATE('2019-01-15 12:42:16', 'SYYYY-MM-DD HH24:MI:SS'), '78', '3');
INSERT INTO "ZYH_TEST" VALUES ('12', 'bite', TO_DATE('2019-01-15 12:42:30', 'SYYYY-MM-DD HH24:MI:SS'), '89', '3');

示例

--listagg()函数:是行转列函数,用于实现对列值的拼接(多行中的指定列字段,拼接成新的一列)。
--格式
listagg(列字段,'分隔符')within group(order by 排序字段)
--分数大于70的学生
select listagg(name,',')within group(order by score) 合并后的姓名 from zyh_test  WHERE score > 70;

--每个班级分数大于70的学生
select classid 班级,listagg(name,',')within group(order by score) 合并后的姓名 from zyh_test  WHERE score > 70 GROUP BY classid;

在这里插入图片描述

--列转行函数listagg()结合分析函数over()
select name 姓名,score 分数,classid 班级,listagg(name,',')within group(order by score) over (partition by classid) 合并后的姓名 from zyh_test ORDER BY classid,score;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值