我有一个表,上面写着员工的名字和他们的薪水。以下是一些示例数据:
STAFF | SALARY
===========================
ALEX | 100.4
JESSICA | 100.4
PETER | 99.2
工资的总和总是一个整数,我想将所有员工的工资四舍五入,然后随机将剩余值放到其中一个上。
例如,如果选择JESSICA接收剩余值,则输出将如下所示。
STAFF | SALARY
===========================
ALEX | 100
JESSICA | 101
PETER | 99
Oracle是否提供了任何内置函数来执行所述操作。
发布于 2016-08-31 12:31:17
对于每条记录,SALARY - TRUNC(SALARY)
应提供每个工资的小数部分的数量。您可以对整个表进行求和,然后增加某个用户的工资,但不包括这个金额。尝试如下所示:
UPDATE yourTable
SET SALARY = TRUNC(SALARY) + (SELECT SUM(SALARY - TRUNC(SALARY)) FROM yourTable)
WHERE STAFF = 'JESSICA'
发布于 2016-08-31 15:38:29
在这里,我尝试了一种根据生成的随机数给出随机结果的方法。
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的其他行上添加了一个,并与实际结果行进行比较。
https://stackoverflow.com/questions/39240375
复制相似问题