簡體   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