2011-10-28 3 views
0

중복 값이있는 데이터베이스가 있습니다. 특히 SiteCode, LastName, FirstName, DateofService, Payer, BilledAmount, NetReceivable 및 ContractualDiscount를 연결하여이 테이블에서 반복적으로 반복되는 레코드를 만듭니다.HistoryID를 기반으로 SQL 중복 필드 제거

이 필드의 인스턴스 하나를 제외한 모든 인스턴스를 제거하고 하나의 NetBilledHistoryID (테이블의 각 레코드에 대한 고유 한 필드)를 선택하여이를 수행하려고합니다.

불행히도이 쿼리를 실행해도 여전히 중복 값이 ​​표시됩니다.

내 선택 쿼리가 이러한 중복을 제거하도록 어떻게 수정할 수 있습니까? 또는 다른 쿼리 기술을 함께 사용해야합니까?

SELECT * 
FROM [Reports].[dbo].[NetBilledHistory] t1 
WHERE EXISTS ( 
       SELECT 1 FROM [Reports].[dbo].[NetBilledHistory] AS t2 
       WHERE t2.SiteCode = t1.SiteCode 
       AND t2.LastName = t1.LastName 
       AND t2.FirstName = t1.FirstName 
       AND t2.DateofService = t1.DateofService 
       AND t2.Payer = t1.Payer 
       AND t2.BilledAmount = t1.BilledAmount 
       AND t2.NetReceivable = t1.NetReceivable 
       AND t2.ContractualDiscount = t1.ContractualDiscount 
       AND t2.NetBilledHistoryID < t1.NetBilledHistoryID) 

답변

0

당신은 CTE를 사용하여 해당를 얻을 수 있습니다 등 열의 용도에 맞게 필요에 따라

WITH cte_query AS (
    SELECT ROW_NUMBER() OVER(
     partition by SiteCode, LastName, FirstName, 
      DateofService, Payer, BilledAmount, NetReceivable, 
      ContractualDiscount 
     order by NetBilledHistoryID) AS RowNum, * 
    FROM [Reports].[dbo].[NetBilledHistory] 
) 

SELECT * FROM cte_query where RowNum = 1; 

조정

+0

BTW,이 SQL 2005와 같은 –

+0

작품 이상 매력. 감사! – MSS

+0

답을 표시하십시오, thx –