如果两行中的一列中的值相同,则从一行更新具有相同值的另一列

时间:2016-05-10 13:22:01

标签: sql sql-server

在MS SQL server management studio中编写SQL。

我现在遇到这个问题,我有一张表,其中每行有两行,其值几乎相同:

code  |   name   | location  |  group
1     |   Thing  |  1        |  1
1     |   Thing  |  2        |  NULL

我需要更新NULL GROUP以匹配具有值的组,其中代码是相同的。

目前采用以下形式:

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

3 个答案:

答案 0 :(得分:1)

这是表格joining的一个选项:

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

答案 1 :(得分:1)

一种方法使用窗口函数:

with toupdate as (
      select t.*, max(grp) over (partition by code) as maxgrp
      from t
     )
update toupdate
    set grp = maxgrp
    where grp is null;

答案 2 :(得分:0)

此UPDATE语句应为每个group找到code的第一个非空值,因此它应该比仅假设只有一个非空值更强大。

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