Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql Oracle中的任何内置函数,用于对数字进行舍入并随机分配剩余值_Sql_Oracle - Fatal编程技术网

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,这在语义上看起来稍微正确一些从数学上讲,这并不重要。