2013-07-22 2 views
2

내 질문은 Multiple NOT distinct과 매우 유사하며, 하나만 쓰는 대신 여러 열을 처리합니다. 나는 테이블과 같이 있습니다두 개의 열로 구분되지 않는 행을 선택하십시오.

A B C 
1 1 0 
1 2 1 
2 1 2 
2 1 3 
2 2 4 
2 3 5 
2 3 6 
3 1 7 
3 3 8 
3 1 9 

그리고 그 결과는 다음과 같아야합니다

A B C 
2 1 2 
2 1 3 
2 3 5 
2 3 6 
3 1 7 
3 1 9 

기본적으로 위의 질문처럼, 고유성은 두 개의 열 대신 하나에 의해 결정되는 경우에만 모든 고유 항목을 제거. 나는 이미 위의 답변에 다양한 조정을 시도했지만 그들 중 누구도 일할 수 없었습니다.

답변

2

당신은 SQL Server를 사용하는, 그래서 이것은 Access에서보다 쉽습니다 :

select A, B, C 
from (select t.*, count(*) over (partition by A, B) as cnt 
     from t 
    ) t 
where cnt > 1; 

count(*)의 사용은 윈도우 함수로입니다. AB 같은 값을 가진 행 수를 세고 있습니다. 마지막 where은 두 개 이상의 항목이있는 행을 선택하기 만합니다.

+0

작품! 감사! OVER 및 PARTITION BY 구문이하는 일에 대한 명확한 설명은 없습니까? –

+0

@ 1215drew-NWR-. . . 이것들은 매우 유용한 윈도우 함수에 사용됩니다. 데이터베이스 문서는 이러한 것들을 잘 다룹니다 (최소한 SQL Server와 Oracle). 그것들은 표준의 일부이며 쉽게 사용할 수 있습니다 (SQL Server, Oracle, Postgres, DB2 등). 내 책 "SQL과 Excel을 사용한 데이터 분석"에서 다루고 있습니다. 기본 SQL 책은 대개이 주제를 다루지 않습니다. –

+0

감사합니다. 설명서를 더 자세히 살펴보고 책을 확인해 보겠습니다. –

1

그것은 충분히 빨리해야 EXISTS

SELECT a, b, c 
    FROM Table1 t 
WHERE EXISTS 
(
    SELECT 1 
    FROM Table1 
    WHERE a = t.a 
    AND b = t.b 
    AND c <> t.c 
) 

와 또 다른 가능한 솔루션입니다.

출력 :

 
| A | B | C | 
------------- 
| 2 | 1 | 2 | 
| 2 | 1 | 3 | 
| 2 | 3 | 5 | 
| 2 | 3 | 6 | 
| 3 | 1 | 7 | 
| 3 | 1 | 9 | 

여기입니다 SQLFiddle 데모 마법처럼

관련 문제