SQL Server技术问询:查找同一ID多行重复特定PCODE的记录
SQL Server 查询:筛选特定PCODE重复出现多次的ID的全部记录
嘿,我来帮你搞定这个查询需求!你要找的是那些ID对应的PCODE为0450的记录出现次数超过1次的所有行对吧?下面给你几种实用的实现方法,你可以根据自己的场景选最合适的:
方法一:子查询筛选符合条件的ID
这种方法逻辑直接,先找出符合要求的ID,再拿这些ID去匹配原表的记录:
SELECT t.ID, t.LINES, t.PCODE FROM YourTableName t WHERE t.PCODE = '0450' AND t.ID IN ( -- 先找出PCODE=0450且出现次数>1的ID SELECT ID FROM YourTableName WHERE PCODE = '0450' GROUP BY ID HAVING COUNT(*) > 1 ) ORDER BY t.ID, t.LINES;
方法二:用CTE(公共表表达式)提升可读性
如果你的查询逻辑后续可能扩展,用CTE会让代码更清晰,容易维护:
-- 先定义一个CTE,存储符合条件的ID WITH DuplicateIDs AS ( SELECT ID FROM YourTableName WHERE PCODE = '0450' GROUP BY ID HAVING COUNT(*) > 1 ) -- 关联原表获取目标行 SELECT t.ID, t.LINES, t.PCODE FROM YourTableName t JOIN DuplicateIDs d ON t.ID = d.ID WHERE t.PCODE = '0450' ORDER BY t.ID, LINES;
方法三:窗口函数实现高效查询
如果你的表数据量比较大,窗口函数只需要扫描一次表,性能会更优:
SELECT ID, LINES, PCODE FROM ( SELECT ID, LINES, PCODE, -- 计算每个ID下PCODE=0450的出现次数 COUNT(*) OVER (PARTITION BY ID, PCODE) AS PcodeCount FROM YourTableName WHERE PCODE = '0450' ) sub -- 筛选出现次数>1的行 WHERE PcodeCount > 1 ORDER BY ID, LINES;
注意事项:
- 记得把代码里的
YourTableName替换成你实际使用的表名哦 - 如果你的
PCODE是数值类型(不是字符串),把'0450'改成0450去掉单引号就行
内容的提问来源于stack exchange,提问作者That Guy XY
相关产品推荐
相关产品推荐

