sql - 使用 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
解决方案
使用窗口函数:
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;
这假定它newadmission
是NULL
或Y
,尽管它很容易适应其他值。
推荐阅读
- javascript - 如何在字符串中找到最后一行(package.json)
- c++ - Clang++/g++ 不在 Aarch64 上矢量化代码
- smartsheet-api - 我是否需要生成新令牌才能查看新的智能工作表数据
- python - 从字符串中的单词列表中查找第一个匹配项
- javascript - Service Worker 没有在 Angular 中注册
- nginx - 使用 nginx 代理动态进入 Kubernetes 服务
- django - Django could not open images
- r - lm(线性回归)函数生成不可移除的异常值
- php - Compare multidimensional array values by key in php
- javascript - Vuejs如何将点击功能设置为语义UI的关闭功能?