You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:53:55