oracle中sum分组取值/汇总值用如下方法。
成都创新互联主营岳阳楼网站建设的网络公司,主营网站建设方案,成都App定制开发,岳阳楼h5微信小程序开发搭建,岳阳楼网站营销推广欢迎岳阳楼等地区企业咨询
如emp表中有如下数据:
现要按deptno分组,求每组中sal的值/汇总值,可用如下语句:
select deptno,sum(sal)/(select sum(sal) from emp) from emp group by deptno;
查询结果:
从中取出所有nck相同的hweight的值,是更新到所有nck相同的数据的hweight2字段中么?
这个是更新所有数据的hweight2为hweight的累加。
update tab a set hweight2=(select sum(hweight) from tab b where a.nck=b.nck group by nck);
更新hweight3的值
update tab a set hweight3=hweight1-hweight-hweight2;
取值。
select hweight2,hweight3 from tab
这个累加可以写在存储过程中,在java中调用,也可以在java里面执行update语句。
如果Oracle版本不是太低的话,使用 正则表达式函数 REGEXP_SUBSTR 处理。\x0d\x0a\x0d\x0a5个参数\x0d\x0a第一个是输入的字符串\x0d\x0a第二个是正则表达式\x0d\x0a第三个是标识从第几个字符开始正则表达式匹配。(默认为1)\x0d\x0a第四个是标识第几个匹配组。(默认为1)\x0d\x0a第五个是是取值范围:\x0d\x0ai:大小写不敏感;\x0d\x0ac:大小写敏感;\x0d\x0an:点号 . 不匹配换行符号;\x0d\x0am:多行模式;\x0d\x0ax:扩展模式,忽略正则表达式中的空白字符。\x0d\x0a\x0d\x0aSQL SELECT\x0d\x0a 2 REGEXP_SUBSTR(a,'[0-9]+')\x0d\x0a 3 FROM\x0d\x0a 4 test_reg_substr\x0d\x0a 5 WHERE\x0d\x0a 6 REGEXP_LIKE(a, '[0-9]+');
decode只是改变列的显示,需要结果为一行你需要增加where语句进行数据过滤。
select distinct regexp_substr('020101:1:13,020101:1:175,020301:1:107+020401:1:140-020501:1:107,020301:1:107*020401:1:140/020501:1:107',
'[^,|+|*|/|-]+', 1, level) as str
from dual
connect by level = regexp_count('020101:1:13,020101:1:175,020301:1:107+020401:1:140-020501:1:107,020301:1:107*020401:1:140/020501:1:107',
'[,|+|*|/|-]') + 1
order by str;
代码:
CREATE OR REPLACE PROCEDURE P_TESTB
AS
VARCURSOR SYS_REFCURSOR;
R USERS%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCH VARCURSOR INTO R;
EXIT WHEN
VARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
END LOOP;
END
P_TESTB;