【问题标题】:Remove duplicates in Left join SQL Server删除左连接 SQL Server 中的重复项
【发布时间】:2014-07-21 08:34:10
【问题描述】:

我在最终结果中有重复。我尝试使用Distinct 以及group by 子句。

Select distinct   
    Orders.OrderNumber, Tracking.TrackingID, 
    Orders.BalanceDue, Orders.Approved, Orders.Name, Orders.ShipCity ,  
    Orders.OrderDate, Orders.country, Orders.Shipping, Orders.CartId
from  
    orders
left join 
    Tracking on Orders.OrderNumber = Tracking.ordernum 
group by 
    Orders.OrderNumber, Orders.BalanceDue, Tracking.TrackingID, 
    Orders.Approved, Orders.Name, Orders.ShipCity, 
    Orders.OrderDate, Orders.country, Orders.Shipping, Orders.CartId

Orders 表中有 8166 行,我只想要最终结果中的那么多列。

![在此处输入图片描述][3]

【问题讨论】:

  • 您能否向我们展示这两个表中的一些行,以及您在最终结果中看到哪些“重复项”? DISTINCT 始终适用于结果的所有列 - 因此,如果您对其中一个列值有任何差异,则它不是重复的
  • 我会凿掉列,直到您看不到重复项并从那里重新开始。但是,我很慢。

标签: sql sql-server-2008 join left-join


【解决方案1】:

获取一个跟踪 ID 的一种方法是使用聚合函数group by 子句中删除 trackingid

Select o.OrderNumber, max(t.TrackingID) as TrackingId,
       o.BalanceDue, o.Approved, o.Name, o.ShipCity,  
       o.OrderDate, o.country, o.Shipping, o.CartId
from orders l left join 
     Tracking t
     on o.OrderNumber = t.ordernum 
group by o.OrderNumber, o.BalanceDue, o.Approved, o.Name, o.ShipCity, 
         o.OrderDate, o.country, o.Shipping, o.CartId;

【讨论】:

    猜你喜欢
    • 2013-01-14
    • 2017-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-06-15
    • 2011-05-13
    • 2021-03-20
    • 2012-07-05
    • 2014-09-09
    相关资源
    最近更新 更多