2012-04-25 3 views
2

SQL 쿼리입니다.sql 이중 여러 열 키

중복 된 데이터를 알고 싶습니다.

샘플 :

Table 1 
Col1, col2, col3, col4 
1, A, AA, AAA 
2, A, BB, AAA 
3, A, BB, AAA 
4, B, AA, AAA 
5, B, AA, BBB 
6, B, AA, CCC 
7, B, BB, AAA 
8, B, CC, AAA 

결과가 있어야한다 : 내 두 배를 어디

2, A, BB, AAA 
3, A, BB, AAA 

또는

A, BB, AAA 

그래서 내가 발견 할 수 있습니다.

감사합니다.

답변

2

당신은 또한 다음과 같이 그것을 할 수 :

시험 데이터

DECLARE @T TABLE(Col1 int, col2 VARCHAR(100), col3 VARCHAR(100), 
       col4 VARCHAR(100)) 

INSERT INTO @T 
VALUES 
    (1, 'A', 'AA', 'AAA'), 
    (2, 'A', 'BB', 'AAA'), 
    (3, 'A', 'BB', 'AAA'), 
    (4, 'B', 'AA', 'AAA'), 
    (5, 'B', 'AA', 'BBB'), 
    (6, 'B', 'AA', 'CCC'), 
    (7, 'B', 'BB', 'AAA'), 
    (8, 'B', 'CC', 'AAA') 

Query1을

;WITH CTE 
AS 
( 
    SELECT 
     COUNT(Col1) OVER(PARTITION BY col2,col3,col4) AS Counts, 
     T.* 
    FROM 
     @T AS T 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    Counts>1 

결과

2 2 A BB AAA 
2 3 A BB AAA 

QUERY2

;WITH CTE 
AS 
( 
    SELECT 
     ROW_NUMBER() OVER(PARTITION BY col2,col3,col4 ORDER BY col1) AS RowNbr, 
     T.* 
    FROM 
     @T AS T 
) 
SELECT 
    * 
FROM 
    CTE 
WHERE 
    CTE.RowNbr>1 

결과

,
2 3 A BB AAA 
+0

탱크 너, 로우 Nbr은 유용합니다 – forX

+0

문제 없습니다. @forX 당신이 생각하는 대답을 upvote 기억하십시오. 그것은 우리 모두에게 따뜻한 솜털 같은 느낌을줍니다 : P – Arion

2

그룹화 할 수 있습니다 열하여 각 그룹에 대해 1 개 이상의 기록이 있는지 확인하십시오

select 
    col2, col3, col4 
from 
    MyTable 
group by 
    col2, col3, col4 
having 
    count(*) > 1 

데모 : http://www.sqlfiddle.com/#!3/5c3a7/2

+0

탱크가 간단하므로 – forX