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

SQL Server统计重复记录总数的查询需求及求助

统计重复记录总数的SQL查询问题

问题背景

我使用SQL Server Management Studio,需要编写查询统计某查询结果的重复记录总数。已有一个查询能输出连续2周未提交车辆检查表的司机姓名及车辆登记信息,现在要统计该结果的总条数(示例中预期为7)。

原查询(输出目标记录)

SELECT DriverName, EngineerVehicleReg_FK
FROM tblPDAForms a WITH (NOLOCK) 
JOIN tblGeneralVehicleInformation b WITH (NOLOCK) ON a.EngineerVehicleReg_FK = b.EngineerVehicleReg  
JOIN tblVehicleStatus c WITH (NOLOCK) ON b.VehicleStatus_IDFK = c.VehicleStatus_ID  
JOIN tblDrivers d WITH (NOLOCK) ON a.AggoraAgent_IDFK = d.AggoraAgent_IDFK  
WHERE PDAFormLocation IS NULL  
AND VehicleStatus_ID IN ('1','5','7')
AND Location_IDFK NOT IN ('7','13') AND EndDate IS NULL  
AND DateSubmitted BETWEEN DATEADD(d,-21,GETDATE()) AND DATEADD(d,-7,GETDATE())
GROUP BY DriverName, EngineerVehicleReg_FK
HAVING 
(COUNT(DriverName) > 1) AND
(COUNT(EngineerVehicleReg_FK) > 1)
ORDER BY DriverName

原查询输出结果

DriverNameEngineerVehicleReg_FK
IanPK19 OVB
JackBX69 TXG
JohnFP22 HTE
LeighFG72 ZTN
NoelFP22 HWW
RossFL23 RYK
TomFP22 HWV

尝试的查询(未得到预期结果)

SELECT COUNT(EngineerVehicleReg_FK) AS Reg  
FROM tblPDAForms pda WITH (NOLOCK)  
JOIN tblGeneralVehicleInformation gv WITH (NOLOCK) ON pda.EngineerVehicleReg_FK = gv.EngineerVehicleReg  
JOIN tblVehicleStatus v WITH (NOLOCK) ON gv.VehicleStatus_IDFK = v.VehicleStatus_ID  
JOIN tblDrivers d WITH (NOLOCK) ON pda.AggoraAgent_IDFK = d.AggoraAgent_IDFK  
WHERE PDAFormLocation IS NULL  
AND VehicleStatus_ID IN ('1','5','7') AND Location_IDFK NOT IN ('7','13') AND EndDate IS NULL  
AND DateSubmitted BETWEEN DATEADD(d,-21,GETDATE()) AND DATEADD(d,-7,GETDATE())
GROUP BY EngineerVehicleReg_FK
HAVING COUNT(EngineerVehicleReg_FK) > 1

错误输出(显示每条记录的重复次数)

Reg
2
2
2
2
2
2
2

期望输出

Reg
7

解决方法

将第一个查询作为子查询嵌套在外层的COUNT统计中,即可得到目标记录的总条数:

SELECT COUNT(*) AS Reg
FROM (
    SELECT DriverName, EngineerVehicleReg_FK
    FROM tblPDAForms a WITH (NOLOCK) 
    JOIN tblGeneralVehicleInformation b WITH (NOLOCK) ON a.EngineerVehicleReg_FK = b.EngineerVehicleReg  
    JOIN tblVehicleStatus c WITH (NOLOCK) ON b.VehicleStatus_IDFK = c.VehicleStatus_ID  
    JOIN tblDrivers d WITH (NOLOCK) ON a.AggoraAgent_IDFK = d.AggoraAgent_IDFK  
    WHERE PDAFormLocation IS NULL  
    AND VehicleStatus_ID IN ('1','5','7')
    AND Location_IDFK NOT IN ('7','13') AND EndDate IS NULL  
    AND DateSubmitted BETWEEN DATEADD(d,-21,GETDATE()) AND DATEADD(d,-7,GETDATE())
    GROUP BY DriverName, EngineerVehicleReg_FK
    HAVING 
    (COUNT(DriverName) > 1) AND
    (COUNT(EngineerVehicleReg_FK) > 1)
) AS SubQuery

内容的提问来源于stack exchange,提问作者Antimony

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 10:35:21