我在SQL Server Management Studio中工作,正在寻找能够计算查询中重复行总数的查询.

目前,我有一个查询,输出司机的姓名和车辆登记,任何司机没有提交车辆判断表连续2周.但我现在正在try 创建第二个查询,该查询给出重复行的总计数.

我现在的查询输出司机姓名和车辆登记,对于连续两周未提交的判断表:

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

以下是输出:

|DriverName|EngineerVehicleReg_FK|
|----------|---------------------|
|Ian       |PK19 OVB             |
|Jack      |BX69 TXG             |
|John      |FP22 HTE             |
|Leigh     |FG72 ZTN             |
|Noel      |FP22 HWW             |
|Ross      |FL23 RYK             |
|Tom       |FP22 HWV             |

我现在需要第二个查询来提供这些记录的计数.因此,在本例中,我希望能够运行一个查询,它只显示计数为7.

我试过几种方法,最接近的方法是:

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  |

任何帮助和帮助都将不胜感激.

-决心 这个问题已经通过将我的第一个查询转换为子查询的建议得到了解决.

推荐答案

您需要使用两个select子句,因为您需要有效地聚合两个子句,第一个是查找哪些子句有重复条目,第二个是计算结果.

从现在开始,最简单的解决方案是将您的查询换成derived table:

SELECT COUNT(Reg) as Reg FROM (<your query here>) z;

Sql相关问答推荐

使用自动增量ID插入失败(无法将值空插入列ID)

判断Pyspark生成的SQL查询

在SQL中创建一个计数器,根据BigQuery/SQL中的条件递归地添加行值

在SQL中将相同且紧挨着的元素进行分组

使用DatePart函数对日期时间值进行分组

如何为该查询编写正确分区依据

如何在Postgres中为单值输入多行?

SQL:使用年/月/日分区查询某个时间段的数据

Postgresql - WHERE 中的 MAX 标准 - 初学者问题

将 json 列键映射到第二个表中的匹配列值

错误:postgresql 中缺少表评级的 FROM 子句条目

创建具有多个子查询的 SQL 视图

计算 BigQuery 中列的中值差 - 分析函数不能作为聚合函数的参数

BigQuery导航函数计算ID

带有数组输入参数的Snowflake UDF优化

如何显示最常引用条目的详细信息

强制 SQL 始终通过 R 从视图中返回至少一行

在 PostgreSQL 中使用重音敏感排序进行重音不敏感搜索

根据开始/结束标记将 GROUP_ID 分配给行

在 Microsoft SQL Server 中,如何只为特定值保留不同的行?