SQL Server查询:按SIZEPOS字段去重并保留重复值首行的实现方法
实现方案
在SQL Server中可通过ROW_NUMBER()窗口函数实现需求:对相同SIZEPOS的行分组编号,仅保留每组编号为1的行即可得到去重后的结果。
完整查询代码
DECLARE @SUBSTITUTE TABLE(SUBSTITUTECODE varchar(25), COLORCODE varchar(15), SIZEPOS smallint); INSERT INTO @SUBSTITUTE(SUBSTITUTECODE, COLORCODE, SIZEPOS) VALUES ('002252200005001', 'BLK', 2), ('002252200005002', 'BLK', 3), ('002252200005004', 'BLK', 5), ('002252200005005', 'BLK', 6), ('002252200005006', 'BLK', 10), ('002252200005007', 'BLK', 11), ('0022522005003', 'BLK', 4), ('0022522005004', 'BLK', 5); WITH RankedSub AS ( SELECT SUBSTITUTECODE, COLORCODE, SIZEPOS, ROW_NUMBER() OVER(PARTITION BY SIZEPOS ORDER BY (SELECT 1)) AS rn FROM @SUBSTITUTE ) SELECT SUBSTITUTECODE, COLORCODE, SIZEPOS FROM RankedSub WHERE rn = 1;
说明
如果你的实际业务表中有明确可判定插入先后的字段(比如自增主键、插入时间戳等),建议将ORDER BY (SELECT 1)替换为对应的字段,保证“保留首次出现行”的逻辑完全符合业务要求。
内容的提问来源于stack exchange,提问作者Faye D.
相关产品推荐
相关产品推荐

