Sql Oracle中的任何内置函数,用于对数字进行舍入并随机分配剩余值
我有一张表,上面写着员工的名字和薪水。 以下是一些示例数据:Sql Oracle中的任何内置函数,用于对数字进行舍入并随机分配剩余值,sql,oracle,Sql,Oracle,我有一张表,上面写着员工的名字和薪水。 以下是一些示例数据: STAFF | SALARY =========================== ALEX | 100.4 JESSICA | 100.4 PETER | 99.2 工资总额始终是一个整数,我想对所有员工的工资进行四舍五入,然后随机将剩余值放入其中一个 例如,如果选择JESSICA接收剩余值,则输出如下 STAFF | SALARY ==============
STAFF | SALARY
===========================
ALEX | 100.4
JESSICA | 100.4
PETER | 99.2
工资总额始终是一个整数,我想对所有员工的工资进行四舍五入,然后随机将剩余值放入其中一个
例如,如果选择JESSICA接收剩余值,则输出如下
STAFF | SALARY
===========================
ALEX | 100
JESSICA | 101
PETER | 99
Oracle是否提供任何内置函数来执行所述操作。对于每个记录,数量工资-TRUNCSALARY应给出每个工资的小数部分。您可以对整个表求和,然后增加某个用户的工资,但不增加此金额。试着这样做:
UPDATE yourTable
SET SALARY = TRUNC(SALARY) + (SELECT SUM(SALARY - TRUNC(SALARY)) FROM yourTable)
WHERE STAFF = 'JESSICA'
在这里,我尝试了一种基于生成的随机编号给出随机结果的方法
with mine(STAFF,salary,status) as
(
select 'ALEX',100.4,'Y' from dual union all
select 'JESSICA',100.4,'Y' from dual union all
select 'PETER',99.2,'Y' from dual union all
select 'randomno',floor(dbms_random.value(1,4)),'N' vno from dual
)
select STAFF,decode(rndno,rno,csalary,rsalary) salary,decode(rndno,rno,'selected to receive the remaining value',null) selected from(
select rownum rno,STAFF,salary,round(salary) rsalary,ceil(salary) csalary,
(select salary from mine where status='N') rndno
from mine where status='Y'
);
在这里,每次运行时都会选择具有浮动工资的新用户。
在上面的查询中,我在另外几行中添加了一行,这些行提供随机no并与实际结果行进行比较。您是想编写选择查询还是表插入?选择查询可以,因为我可以在以后将选择的结果插入到另一个表中。或者TRUNCSALARY+select SUMSALARY-TRUNCSALARY FROM yourTable,这在语义上看起来稍微正确一些从数学上讲,这并不重要。