如何将结果集划分为相等的部分?

时间:2017-07-10 11:43:22

标签: sql oracle plsql

我有一张表new_table

ID   PROC_ID     DEP_ID    OLD_STAFF   NEW_STAFF
1      15          43         58          ?  
2      19          43         58          ?
3      29          43         58          ?
4      31          43         58          ?
5      35          43         58          ?
6      37          43         58          ?
7      38          43         58          ?
8      39          43         58          ?
9      58          43         58          ? 
10     79          43         58          ?

如何选择所有proc_ids并更新new_staff,例如

ID   PROC_ID     DEP_ID    OLD_STAFF   NEW_STAFF
1      15          43         58          15  
2      19          43         58          15
3      29          43         58          15
4      31          43         58          15
5      35          43         58          23
6      37          43         58          23
7      38          43         58          23
8      39          43         58          28
9      58          43         58          28 
10     79          43         58          28


15 - 4(proc_id)
23 - 3(proc_id)
28 - 3(proc_id)
58 - is busi

其中15,23,28和58名员工在一个部门

2 个答案:

答案 0 :(得分:1)

  

“如何划分相等的部分”

Oracle有一个函数ntile(),它将结果集拆分为相等的桶。例如,此查询将您发布的数据放入四个桶中:

SQL> select id
  2        , proc_id
  3        , ntile(4) over (order by id asc) as gen_staff
  4  from new_table;

        ID    PROC_ID  GEN_STAFF
---------- ---------- ----------
         1         15          1
         2         19          1
         3         29          1
         4         31          2
         5         35          2
         6         37          2
         7         38          3
         8         39          3
         9         58          4
        10         79          4

10 rows selected.

SQL> 

这不是您想要的解决方案,但您需要先澄清您的要求,然后才能提供完整的答案。

答案 1 :(得分:0)

   update new_table
   set new_staff='15'
   where ID in('1','2','3','4')

   update new_table
   set new_staff='28'
   where ID in('8','9','10')

   update new_table
   set new_staff='23'
   where ID in('5','6','7')

不确定这是不是你的意思。