SQL Server中按阈值统计ERR_CD并筛选插入临时表的实现方法
SQL Server 实现方案
场景说明
现有表(假设表名为OriginalTable)包含PK_ID、ERR_CD、ERR_THRESHOLD字段,需统计每个ERR_CD的记录行数,筛选出行数达到对应ERR_THRESHOLD的所有记录,并插入临时表。
方法一:使用窗口函数(推荐,性能更优)
-- 提前创建临时表(按需定义字段类型,需与原表匹配) CREATE TABLE #TempResult ( PK_ID INT, ERR_CD VARCHAR(50), ERR_THRESHOLD INT ); -- 插入符合条件的记录 INSERT INTO #TempResult (PK_ID, ERR_CD, ERR_THRESHOLD) SELECT PK_ID, ERR_CD, ERR_THRESHOLD FROM ( -- 子查询统计每个ERR_CD的总条数 SELECT *, COUNT(*) OVER (PARTITION BY ERR_CD) AS ErrTotalCount FROM OriginalTable ) AS SubQuery -- 筛选出行数≥对应阈值的记录 WHERE ErrTotalCount >= ERR_THRESHOLD;
方法二:分组统计后关联原表
-- 创建临时表 CREATE TABLE #TempResult ( PK_ID INT, ERR_CD VARCHAR(50), ERR_THRESHOLD INT ); -- 插入数据 INSERT INTO #TempResult (PK_ID, ERR_CD, ERR_THRESHOLD) SELECT ot.PK_ID, ot.ERR_CD, ot.ERR_THRESHOLD FROM OriginalTable ot -- 关联分组统计的结果 JOIN ( SELECT ERR_CD, COUNT(*) AS ErrTotalCount, MAX(ERR_THRESHOLD) AS ErrThreshold -- 假设同ERR_CD的阈值一致,取MAX/MIN均可 FROM OriginalTable GROUP BY ERR_CD ) AS AggData ON ot.ERR_CD = AggData.ERR_CD WHERE AggData.ErrTotalCount >= AggData.ErrThreshold;
注意事项
- 若同一
ERR_CD存在不同的ERR_THRESHOLD值,需明确筛选逻辑(比如取该ERR_CD的最大阈值,或每条记录与自身阈值比较),上述示例默认同ERR_CD的阈值统一。 - 临时表字段类型需与原表对应字段保持一致,可根据实际业务调整(比如
ERR_CD可能为INT类型)。
内容的提问来源于stack exchange,提问作者PunithaR
相关产品推荐
相关产品推荐

