在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
答案 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