oracle 行列转换
发布日期:2025-04-29 23:03:27
浏览次数:22
分类:精选文章
本文共 2379 字,大约阅读时间需要 7 分钟。
PL/SQL ????????????????????????????????????????????????PL/SQL?????????????????????
1. ?????????
??????????????? GROUP BY ??????????????????????????
SELECT class1, SUM(CASE WHEN class1 = '1' THEN callcount ELSE 0 END) AS callcount1, SUM(CASE WHEN class1 = '2' THEN callcount ELSE 0 END) AS callcount2, SUM(CASE WHEN class1 = '3' THEN callcount ELSE 0 END) AS callcount3FROM tGROUP BY class1;
2. ??????
???????????????????PL/SQL ??? CURSOR ??????????????????????????
CREATE OR REPLACE FUNCTION get_c2(tmp_c1 NUMBER)RETURN VARCHAR2ISCol_c2 VARCHAR2(4000);BEGIN FOR cur IN (SELECT c2 FROM t WHERE c1 = tmp_c1) LOOP Col_c2 := Col_c2 || cur.c2; END LOOP; Col_c2 := rtrim(Col_c2, 1); RETURN Col_c2;END;
3. ????
????????????????????
CREATE TABLE t ( class1 VARCHAR2(2 BYTE), calldate DATE, callcount INTEGER);INSERT INTO t(class1, calldate, callcount)VALUES ('1', TO_DATE('08/08/2005', 'MM/DD/YYYY'), 40);INSERT INTO t(class1, calldate, callcount)VALUES ('1', TO_DATE('08/07/2005', 'MM/DD/YYYY'), 6);INSERT INTO t(class1, calldate, callcount)VALUES ('2', TO_DATE('08/08/2005', 'MM/DD/YYYY'), 77);INSERT INTO t(class1, calldate, callcount)VALUES ('3', TO_DATE('08/09/2005', 'MM/DD/YYYY'), 33);INSERT INTO t(class1, calldate, callcount)VALUES ('3', TO_DATE('08/08/2005', 'MM/DD/YYYY'), 9);INSERT INTO t(class1, calldate, callcount)VALUES ('3', TO_DATE('08/07/2005', 'MM/DD/YYYY'), 21);COMMIT; 4. ?????????
??????????????? CURSOR ? REF CURSOR ????????????????????????
CREATE OR REPLACE FUNCTION fn_rsRETURN pkg_getrecord.myrctypeISs VARCHAR2(4000);CURSOR c1 ISSELECT ',sum(case when Class1='|| class1 || ' THEN CallCount else 0 end) "' AS c2, class1 || '"CallCount' || class1 || '" ' || c2 || ' FROM tGROUP BY class1;r1 c1%ROWTYPE;list_cursor pkg_getrecord.myrctype;BEGINs := 'SELECT CallDate ';OPEN c1;LOOPFETCH c1 INTO r1;EXIT WHEN c1%NOTFOUND;s := s || r1.c2;END LOOP;CLOSE c1;s := s || ' from T group by CallDate order by CallDate desc ';OPEN list_cursor FOR s;RETURN list_cursor;END fn_rs;
5. ?????????
???????????????????????
var results refcursor;exec :results := fn_rs;print results;
6. ??????
??????????????
CallDate CallCount1 CallCount2 CallCount32005-08-09 0 0 332005-08-08 40 77 92005-08-07 6 0 21
????????????????????PL/SQL???????????????????????????????????????????????????
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2026年06月21日 13时22分58秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
php缓存查询函数
2023-03-01
php编写TCP服务端和客户端程序
2023-03-01
php编码规范
2023-03-01
PHP编码规范-PSR1、psr2 /psr3 psr4
2023-03-01
PHP编程效率的20个要点
2023-03-01
PHP网页缓存技术优点及代码
2023-03-01
PHP自动化测试(一)make test 和 phpt
2023-03-01
php自定义函数: 文件大小转换成智能形式
2023-03-01
php英语单词,php常用英语单词,快速学习php编程英语(6)
2023-03-01
PHP获取curl传输进度
2023-03-01
PHP获取IP所在地区(转)
2023-03-01
PHP获取IP的方法对比
2023-03-01
php获取json里面内容
2023-03-01
R2的版本由来
2023-03-01
PHP获取图片宽度高度、大小尺寸、图片类型、用于布局的img属性
2023-03-01
PHP获取当前文件的绝对路径
2023-03-01
PHP获取当前时间、时间戳的各种格式写法汇总
2023-03-01
PHP获取当前页面的完整URL
2023-03-01
php获取数据库中数据生成json,中文乱码问题的解决方案
2023-03-01