获取表中的每一行重复项

时间:2012-07-30 18:24:39

标签: sql duplicates

我有代码可以抓取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))

2 个答案:

答案 0 :(得分:2)

如果CTE可用(也可以使用子选择):

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
        ;

答案 1 :(得分:0)

查找 field1 (和 field2 ,评论)的重复项:

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