중복

2011-09-16 1 views
3

가능한 중복 :
Delete duplicate records from a SQL table without a primary key중복

내가 가진 데이터 : 나는) dublicate 기록 에 의해 출력 (다음 (주문을받을 필요가

SELECT 
      a 
     , b 
    FROM 
    (
     select a = 1, b = 30 
     union all 
     select a = 2, b = 50 
     union all 
     select a = 3, b = 50 
     union all 
     select a = 4, b = 50 
     union all 
     select a = 5, b = 60 
    ) t 

결과 집합에서 제외해야 함) :

a   b 
----------- ----------- 
1   30 
2   50 
3   50 -- should be excluded 
4   50 -- should be excluded 
5   60 
+1

? - 그게 당신의 예제 데이터와 함께 작동하기 때문에 – antlersoft

+0

@antlersoft 그것으로 충분합니다. 나는 가지고있다 : a는 int이고 b는 uniqueidentifier이다. 그래서 역시 작동 할 것이다. 고맙습니다. – garik

답변

4
SELECT 
      min(a) as a 
     , b 
    FROM 
    (
     select a = 1, b = 30 
     union all 
     select a = 2, b = 50 
     union all 
     select a = 3, b = 50 
     union all 
     select a = 4, b = 50 
     union all 
     select a = 5, b = 60 
    ) t 
GROUP BY b  
ORDER BY a 
+1

a에 숫자가 아닌 항목이 있으면 어떻게됩니까? – Pepe

+0

@ P.R - 여전히'min()'을 사용할 수 있어야합니다. –

+0

그것은 충돌하고 숫자로 변환 할 수 없다고 말합니다 (MS에서 시도했습니다) – Pepe

1

는 오라클에서 나는 GROUP BY 절을 사용하여이 작업을 수행 할 수 있었다, 당신은 유사 할 수 있어야합니다.

select min(a), b 
from (select 1 a, 30 b 
     from dual 
     union all 
     select 2 a, 50 b 
     from dual 
     union all 
     select 3 a, 50 b 
     from dual 
     union all 
     select 4 a, 50 b 
     from dual 
     union all 
     select 5 a, 60 b from dual) 
group by b; 

편집 : 다른 사람이 MS의 SQL 솔루션을 함께했다처럼, 그래도 난 후손을 위해 여기를 떠날거야 보인다.

1

이 작업을 수행하는 가장 쉬운 방법은 간단 GROUP BY 함께 :

그래서 질문 b`에 의해 그룹 ...에서 B, '선택 분 (A)보다 더 복잡하다
SELECT 
     a 
    , b 
INTO #tmp 
FROM 

(
    select a = 1, b = 30 
    union all 
    select a = 2, b = 50 
    union all 
    select a = 3, b = 50 
    union all 
    select a = 4, b = 50 
    union all 
    select a = 5, b = 60 
) t 


SELECT DISTINCT MIN(a) AS a,b 
FROM #tmp 
GROUP BY b 
ORDER BY a 
+1

당신이 b에 의해 그룹화하고 a에 aggegate를 사용하는 것처럼 distinct는 anythin을하지 않을 것입니다. 각 행은 이미 gaurunt로 구분 될 것입니다. – TimothyAWiseman