繁体   English   中英

从SQL查询中删除重复项

[英]Remove Duplicates from SQL Query

我目前正在使用此查询来触发客户事件。 但是有时结果中会出现同一位客户,因为他们被分配了一个不同的WorkOrderId,这是我的主要过滤条件。 因此,我想扩展过滤器以查找唯一的CustomerName。 换句话说,如果查询返回具有相同CustomerName的两行,那么我希望它完全排除第二行。

SELECT CustomerName, JobId, Email, CCEmail, WorkOrderId AS id
FROM dbo.vwWorkOrderDetail
WHERE JobStatusId=3 AND Active=1 AND LocationStopTypeId=1
ORDER BY WorkOrderId DESC

我尝试使用DISTINCT,但我继续获得在不同行中包含相同CustomerName的结果。 如何设置此查询,使其返回通过所有WHERE条件的结果,然后仅显示具有唯一CustomerName的行?

只要您包括WorkOrderId,DISTINCT都不会为您做任何事情。 DISTINCT只能消除SELECT中指定的所有列都包含相同信息的重复项。 因此,要使用DISTINCT消除重复的客户,您需要这样做:

SELECT DISTINCT CustomerName, JobId, Email, CCEmail
FROM dbo.vwWorkOrderDetail
WHERE JobStatusId=3 AND Active=1 AND LocationStopTypeId=1
ORDER BY WorkOrderId DESC

保留WorkOrderId的最佳方法是根据基础表创建一个新视图。 您将需要确定要显示的可用WorkOrderId中的哪个WorkOrderId。 通常,这是最高的ID。 如果您只需要WorkOrderId本身而不是细节,这实际上很简单。 请注意,下面的代码是一个简单的示例,它假定CustomerId直接绑定到工作订单。 要真正正确回答此问题,您需要提供vwWorkOrderDetail的代码。

SELECT CustomerName, JobId, Email, CCEmail, (SELECT MAX(WorkOrderId) FROM WorkOrders WHERE CustomerID = Customers.CustomerID) AS WorkOrderID
FROM Customers
WHERE JobStatusId=3 AND Active=1 AND LocationStopTypeId=1
ORDER BY WorkOrderId DESC
SELECT CustomerName, JobId, Email, CCEmail, max(WorkOrderId) AS id
FROM dbo.vwWorkOrderDetail
WHERE JobStatusId=3 AND Active=1 AND LocationStopTypeId=1
GROUP BY CustomerName, JobId, Email, CCEmail

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM