2012-07-30 2 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

+0

GUID 필드가 있습니다. 따라서 모든 행은 고유하지만 추적 번호와 총계가 동일한 행을 찾아야합니다. – Jeff

+0

CTE를 사용할 수 있습니까? – wildplasser

답변

0

은 (및 FIELD2 주석) 필드 1에 대한 중복 찾기 : CTE를 사용할 수있는 경우

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

(또한 subselect를 사용하여 수행 할 수 있습니다.)

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 
     ; 
관련 문제