Sql 如果两行中的一列中有相同的值,则使用一行中的相同值更新另一列
在MS SQL server management studio中编写SQL 我现在有这个问题,我有一个表,其中每行有两个几乎相同的值:Sql 如果两行中的一列中有相同的值,则使用一行中的相同值更新另一列,sql,sql-server,Sql,Sql Server,在MS SQL server management studio中编写SQL 我现在有这个问题,我有一个表,其中每行有两个几乎相同的值: code | name | location | group 1 | Thing | 1 | 1 1 | Thing | 2 | NULL 我需要更新空组以匹配具有值的组,其中代码相同 目前以这种形式: code Locationid ItemGroup2 100001
code | name | location | group
1 | Thing | 1 | 1
1 | Thing | 2 | NULL
我需要更新空组以匹配具有值的组,其中代码相同
目前以这种形式:
code Locationid ItemGroup2
100001 1 TTE
100001 2 NULL
100002 1 TTG
100002 2 NULL
我想更新表以匹配:
code Locationid ItemGroup2
100001 1 TTE
100001 2 TTE
100002 1 TTG
100002 2 TTG
这里有一个选项
将表连接到自身:
update t1
set grp = t2.grp
from yourtable t1
join yourtable t2 on t1.code = t2.code and t2.grp is not null
where t1.grp is null
这里有一个选项将表连接到自身:
update t1
set grp = t2.grp
from yourtable t1
join yourtable t2 on t1.code = t2.code and t2.grp is not null
where t1.grp is null
一种方法使用窗口函数:
with toupdate as (
select t.*, max(grp) over (partition by code) as maxgrp
from t
)
update toupdate
set grp = maxgrp
where grp is null;
一种方法使用窗口函数:
with toupdate as (
select t.*, max(grp) over (partition by code) as maxgrp
from t
)
update toupdate
set grp = maxgrp
where grp is null;
对于每个代码
,此UPDATE语句应该找到组
的第一个非空值,因此它应该比简单地假设只有一个非空值更可靠
UPDATE b
SET b.[group]=a.[group]
FROM MyTable b
JOIN (
SELECT [code], [group], ROW_NUMBER() OVER(PARTITION BY [code]) as rk
FROM MyTable WHERE [group] IS NOT NULL
) a ON a.[code]=b.[code] AND a.[rk]=1
对于每个代码
,此UPDATE语句应该找到组
的第一个非空值,因此它应该比简单地假设只有一个非空值更可靠
UPDATE b
SET b.[group]=a.[group]
FROM MyTable b
JOIN (
SELECT [code], [group], ROW_NUMBER() OVER(PARTITION BY [code]) as rk
FROM MyTable WHERE [group] IS NOT NULL
) a ON a.[code]=b.[code] AND a.[rk]=1
如果每个代码存在多个非空组,它应该使用哪一个呢?每个代码行有两个,位置为1和2。位置1有一个非空组,位置2有一个空组。更新了问题。如果每个代码存在多个非空组,它应该使用哪一个?每个代码行有两个,位置1和2。位置1具有非空组,位置2具有空组。已更新问题。