sql - 如何使用同一表中的列进行更新(ORACLE)
问题描述
我有一个问题要问。
有一个表名“T1”,列有“empno(pk)”、“deptno”、“sort_order”
sort_order 列,有点乱。它运作良好,但看起来很糟糕......所以我想使用 Rank() 更新行。
RANK() OVER(PARTITION BY deptno ORDER BY sort_order ASC) AS new_sorder
我不知道如何使用 NEW_SORDER 的值更新 sort_order 列。我尝试使用“MERGE INTO”效果非常好,但我想知道有什么方法不使用“MERGE INTO”。
这是我试过的...
UPDATE t1 A
set A.sort_order = (SELECT B.sort_order FROM
(SELECT empno,
deptno,
RANK() OVER( PARTITION BY deptno
ORDER BY sort_order ASC ) AS new_sorder
FROM t1 B
ORDER BY deptno, sort_order) B
WHERE A.empno = B.empno);
我解决了这个问题,(我不知道我是如何解决的...... wth......)这就是我使用的。(还有一个列名'dept_order'用于排序结果)
UPDATE t1 a SET sort_order = (
Select new_order
FROM (
select empno,deptno, rank() over (partition by deptno, dept_order
order by sort_order) new_order
FROM t1
) b
WHERE a.empno = b.empno
AND a.deptno = b.deptno );
解决方案
您可以将更新与子查询一起使用,如下所示:
UPDATE T1 A
SET
A.SORT_ORDER = (
SELECT B.NEW_SORDER
FROM (
SELECT EMPNO,
RANK() OVER(
PARTITION BY DEPTNO
ORDER BY SORT_ORDER ASC
) AS NEW_SORDER
FROM T1 B
) B
WHERE A.EMPNO = B.EMPNO
);
推荐阅读
- excel - 删除空白行的问题
- java - 更改 disableProperty() 函数的颜色/如何禁用单击舞台
- excel - 在 Excel 的 VLOOKUP 函数中使用 MATCH 函数作为范围
- xcode - 如何在不改变操作系统主题的情况下使 Xcode 10 变暗?
- python-2.7 - py_compile 与 import 中的编码
- google-cloud-platform - 如何仅允许创建服务器的开发人员访问 GCE?
- php - 如何在 Symfony 环境之间切换?
- windows - 如何使用 Angular2 和 Typescript 获取设备信息
- reactjs - 纯减速器和画布上下文?
- php - Codeigniter如何从数据库中删除帖子数据中不存在的值