2012-07-30 42 views
1

我有代码抓取SQL表中的重复项,并通过跟踪编号对它们进行分组。我希望看到每一行重复,而不是只有他们组。用于获取组重复的代码如下:获取表格中的每一行副本

Select 
     CarrierID 
    , Mode 
    , TrackingNumber 
    , PickupID 
    , Reference1 
    , Reference2 
    , Quantity 
    , BilledWeight 
    , ActualWeight 
    , Zone 
    , ServiceLevel 
    , PickupDate 
    , SenderCompany 
    , SenderAddress 
    , SenderCity 
    , SenderState 
    , SenderZip 
    , ReceiverCompany 
    , ReceiverAddress 
    , ReceiverCity 
    , ReceiverState 
    , ReceiverZip 
    , FreightCharge 
    , Fuel 
    , Accessories 
    , TotalCharges 
    , WrongName 
    , WrongCompany 
    , WrongAddress 
    , WrongCity 
    , WrongState 
    , WrongZip 
    , WrongCountry 
    , CorrectedName 
    , CorrectedCompany 
    , CorrectedAddress 
    , CorrectedCity 
    , CorrectedState 
    , CorrectedZip 
    , CorrectedCountry 
    , Count(TrackingNumber) as TrackingNumberTotal 
    , Count(TotalCharges) as NumberofDuplicates 
from Prasco_GencoShipments 
group by 
     TrackingNumber 
    , TotalCharges 
    , CarrierID 
    , Mode 
    , TrackingNumber 
    , PickupID 
    , Reference1 
    , Reference2 
    , Quantity 
    , BilledWeight 
    , ActualWeight 
    , Zone 
    , ServiceLevel 
    , PickupDate 
    , SenderCompany 
    , SenderAddress 
    , SenderCity 
    , SenderState 
    , SenderZip 
    , ReceiverCompany 
    , ReceiverAddress 
    , ReceiverCity 
    , ReceiverState 
    , ReceiverZip 
    , FreightCharge 
    , Fuel 
    , Accessories 
    , TotalCharges 
    , WrongName 
    , WrongCompany 
    , WrongAddress 
    , WrongCity 
    , WrongState 
    , WrongZip 
    , WrongCountry 
    , CorrectedName 
    , CorrectedCompany 
    , CorrectedAddress 
    , CorrectedCity 
    , CorrectedState 
    , CorrectedZip 
    , CorrectedCountry 
having (count(TrackingNumber) > 1 and (count(TotalCharges) > 1)) 
+0

该表的唯一行标识符是什么? – egrunin 2012-07-30 18:30:43

+0

有一个GUID字段。所以每一行都是唯一的,但我需要找到具有相同跟踪编号和总费用的行。 – Jeff 2012-07-30 18:34:28

+0

你可以使用CTE吗? – wildplasser 2012-07-30 19:00:51

回答

0

查找重复的FIELD1(和场2,评论):

SELECT t1.* 

    FROM test t1 

    INNER JOIN test t2 
    ON t2.field1 = t1.field1 -- AND t2.field2 = t1.field2 

    WHERE t1.id <> t2.id 

SQLFiddle

2

如果热膨胀系数可用(也可以用子选择来完成):

WITH dups AS (
     SELECT TrackingNumber, TotalCharges 
     FROM Prasco_GencoShipments 
     GROUP BY TrackingNumber, TotalCharges 
     HAVING COUNT(*) > 1 
     ) 
SELECT ta.* 
FROM Prasco_GencoShipments ta 
JOIN dups du ON du.TrackingNumber = ta.TrackingNumber AND du.TotalCharges = ta.TotalCharges 
ORDER BY 
     TrackingNumber 
     , TotalCharges 
     ;