SQL更新来自相同table的数据
SQL UPDATE on with data from same table
我有一个 table 的下一个情况,需要从相同 table 中的行更新行,如您在此处看到的:
TABLE
ID
SN
FID
1
12345
1
2
1122
2
3
12345-RG
NULL
4
1122-RG
NULL
我需要从第 1 行更新第 3 列 FID(相同的 SN,不同的结尾仅在末尾 -RG)
从第 2 行更新第 4 列 FID(相同的 SN,不同的结尾 -RG)
所以结果应该是:
TABLE
ID
SN
FID
1
12345
1
2
1122
2
3
12345-RG
1
4
1122-RG
2
我尝试了很多方法,但我不明白这个...我尝试声明一个温度 table 并尝试从那里进行比较,但仍然存在这个问题...
假设 [SN]
正在扩充 -RG
例子
with cte as (
Select *
,NV = max(FID) over (partition by replace(SN,'-RG','') )
From YourTable
)
Update cte set FID = NV
--Where FID is null -- Optional
更新后Table
ID SN FID
1 12345 1
2 1122 2
3 12345-RG 1
4 1122-RG 2
我有一个 table 的下一个情况,需要从相同 table 中的行更新行,如您在此处看到的:
TABLE
ID | SN | FID |
---|---|---|
1 | 12345 | 1 |
2 | 1122 | 2 |
3 | 12345-RG | NULL |
4 | 1122-RG | NULL |
我需要从第 1 行更新第 3 列 FID(相同的 SN,不同的结尾仅在末尾 -RG) 从第 2 行更新第 4 列 FID(相同的 SN,不同的结尾 -RG)
所以结果应该是:
TABLE
ID | SN | FID |
---|---|---|
1 | 12345 | 1 |
2 | 1122 | 2 |
3 | 12345-RG | 1 |
4 | 1122-RG | 2 |
我尝试了很多方法,但我不明白这个...我尝试声明一个温度 table 并尝试从那里进行比较,但仍然存在这个问题...
假设 [SN]
正在扩充 -RG
例子
with cte as (
Select *
,NV = max(FID) over (partition by replace(SN,'-RG','') )
From YourTable
)
Update cte set FID = NV
--Where FID is null -- Optional
更新后Table
ID SN FID
1 12345 1
2 1122 2
3 12345-RG 1
4 1122-RG 2