MS SQL:如何按最大行号更新CANDIDACY表的CUR_CAND列?
MS SQL 实现按ID分组标记最大RowNum记录为当前记录
方法一:分两步更新(先统一设为N,再标记最大行)
- 先将所有记录的
CUR_CAND设为N:
UPDATE CANDIDACY SET CUR_CAND = 'N'
- 找到每个
ID分组中RowNum最大的行,将其CUR_CAND设为Y:
UPDATE c SET CUR_CAND = 'Y' FROM CANDIDACY c INNER JOIN ( -- 子查询获取每个ID的最大RowNum SELECT ID, MAX(RowNum) AS MaxRowNum FROM CANDIDACY GROUP BY ID ) m ON c.ID = m.ID AND c.RowNum = m.MaxRowNum
方法二:一步到位更新(使用CASE语句)
无需先统一设为N,直接通过关联子查询判断每行是否为当前ID的最大RowNum记录:
UPDATE c SET CUR_CAND = CASE WHEN c.RowNum = m.MaxRowNum THEN 'Y' ELSE 'N' END FROM CANDIDACY c JOIN ( SELECT ID, MAX(RowNum) AS MaxRowNum FROM CANDIDACY GROUP BY ID ) m ON c.ID = m.ID
方法三:使用CTE(公共表表达式)
CTE写法更清晰,适合复杂场景:
WITH MaxRowPerID AS ( SELECT ID, MAX(RowNum) AS MaxRowNum FROM CANDIDACY GROUP BY ID ) UPDATE c SET CUR_CAND = 'Y' FROM CANDIDACY c JOIN MaxRowPerID m ON c.ID = m.ID AND c.RowNum = m.MaxRowNum
注意事项
- 确保
RowNum在每个ID分组内是唯一的,避免同一ID出现多个最大RowNum导致多条记录被标记为Y。 - 如果你的临时表是局部临时表(仅当前会话可见),记得表名前加
#,比如#CANDIDACY。
内容的提问来源于stack exchange,提问作者rjohns
相关产品推荐
相关产品推荐

