首页 > 解决方案 > 使用 group by 根据列中的现有数据更新表中的列

问题描述

我是 SQL Server 新手,请帮忙

我有一张桌子:

Group   id     DEPT     newadmission 
--------------------------------------
 A      001     CS       Y
 A      002     ECE      
 A      003     MC     
 B      561     CS  
 B      781     IT
 C      789     CS       Y
 C      003     CS      

如果一个小组有一个新的入场,整个小组都应该得到那个值。

如果没有新的录取,它可以保持原样。

我怎样才能做到这一点?

期望的输出

Group   id      DEPT    newadmission 
------------------------------------
 A      001     CS          Y
 A      002     ECE         Y   
 A      003     MC          Y  
 B      561     CS    
 B      781     IT
 C      789     CS          Y
 C      003     CS          Y

标签: sqlsql-server

解决方案


使用窗口函数:

with toupdate as (
      select t.*, max(newadmission) over (partition by group) as new_newadmission
      from t
     )
update toupdate
    set newadmission = new_newadmission
    where newadmission is null;

这假定它newadmissionNULLY,尽管它很容易适应其他值。


推荐阅读