2012-04-25 30 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') 

查询1

;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

坦克你,rowNbr是有用的 – forX 2012-04-25 17:25:08

+0

没问题。记住要记住你认为很好的答案。这给了我们一种温暖的模糊感觉:P – Arion 2012-04-25 17:50:32

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 2012-04-25 15:17:05