zl程序教程

您现在的位置是:首页 >  其它

当前栏目

listagg()行转列函数[通俗易懂]

函数 通俗易懂 转列 Listagg
2023-06-13 09:13:43 时间

大家好,又见面了,我是你们的朋友全栈君。

--基础数据
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;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/196438.html原文链接:https://javaforall.cn