我有一張類似于
| ID | 合同 | 角色 | 開始 |
|---|---|---|---|
| 一種 | 1 | 27 | 2020-01-01 |
| 乙 | 1 | 14 | 2021-01-01 |
| C | 2 | 27 | 2020-05-01 |
| D | 2 | 14 | 2021-01-01 |
我想將 27 個角色的開始值復制到 14 個角色的開始。這需要按合同編號分組完成。
例如。行ID的初學者甲應當復制到初學者行ID的乙和行ID的初學者?應當復制到初學者行ID的d
期望的結果:
| ID | 合同 | 角色 | 開始 |
|---|---|---|---|
| 一種 | 1 | 27 | 2020-01-01 |
| 乙 | 1 | 14 | 2020-01-01 |
| C | 2 | 27 | 2020-05-01 |
| D | 2 | 14 | 2020-05-01 |
類似的東西,但按合同分組:
UPDATE MyTable
SET
beginn = otherRoleData.beginn
FROM
(
SELECT
beginn
FROM
mytable
WHERE
role = 27
) otherRoleData
WHERE
role =14;
我該怎么做?我按條件與小組斗爭......
uj5u.com熱心網友回復:
如果 14 和 27 是靜態資料,那么試試這個:
update f1
set f1.beginn = f2.beginn
from MyTable f1
inner join MyTable f2 on f1.ID != f1.ID and f1.contract = f2.contract and f1.role = 14 and f2.role = 27
uj5u.com熱心網友回復:
怎么樣merge?
前:
SQL> select * from test order by id;
I CONTRACT ROLE BEGINN
- ---------- ---------- ----------
A 1 27 01.01.2020
B 1 14 01.01.2021
C 2 27 01.05.2020
D 2 14 01.01.2021
合并:
SQL> merge into test a
2 using (select contract, beginn
3 from test b
4 where b.role = 27
5 ) x
6 on (a.contract = x.contract)
7 when matched then update set
8 a.beginn = x.beginn
9 where a.role = 14;
2 rows merged.
后:
SQL> select * from test order by id;
I CONTRACT ROLE BEGINN
- ---------- ---------- ----------
A 1 27 01.01.2020
B 1 14 01.01.2020
C 2 27 01.05.2020
D 2 14 01.05.2020
SQL>
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/368562.html
