使用分组依据基于列中的现有数据更新表中的列

时间:2018-09-25 20:25:58

标签: sql sql-server

我是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

2 个答案:

答案 0 :(得分:1)

使用窗口功能:

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,尽管它很容易适应其他值。

答案 1 :(得分:1)

您只能在公共表表达式后跟Update语句以获取所需的输出。

;WITH CTE AS
(
SELECT DISTINCT [Group] FROM
Table1 WHERE newadmission = 'Y'
)
UPDATE t
SET
t.newadmission = 'Y'
FROM 
Table1 t INNER JOIN CTE ON
t.[Group] = CTE.[Group]