2013-02-20 40 views
1

我处于这种情况,我需要选择具有两个特定列中相同内容的行,并在第三个列中选择不同的内容。到目前为止,我得到了这两个相似的列:查找具有两个相似列和一个不同的重复项

SELECT id, Title, 
COUNT(*) AS NumOccurrences 
FROM Table 
GROUP BY id, Title 
HAVING (COUNT(*) > 1) 

我现在需要在此查询中指定第三个不同的列。我们称之为拉尔夫。这显然不起作用:

SELECT id, Title, DISTINCT Ralph, 
COUNT(*) AS NumOccurrences 
FROM Table 
GROUP BY id, Title 
HAVING (COUNT(*) > 1) 

那么会怎样?

+0

哪些SQL服务器版本

;WITH cte AS ( SELECT id, Title, Ralph, COUNT(*) OVER (PARTITION BY id, Title) AS cnt FROM dbo.test11 GROUP BY id, Title, Ralph ) SELECT * FROM cte WHERE cnt > 1 

演示COUNT(*)? – Arion 2013-02-20 10:48:17

+0

对不起,SQL Server 2008 – SylvainB 2013-02-20 10:49:40

回答

0
select * from (
    SELECT id, Title, COUNT(*) AS NumOccurrences 
    FROM Table t 
    GROUP BY id, Title 
    HAVING (COUNT(*) > 1) 
) t 
cross apply (
    select distinct Ralph 
    from Table 
    where id = t.id and Title = t.Title 
) t2 
+0

感谢您的帮助!但令人遗憾的是: “子查询返回的值超过1,当子查询跟随=,!=,<, <= , >,> =或子查询用作表达式时,这是不允许的。 – SylvainB 2013-02-20 10:53:04

+0

也许我应该指定它不是一个唯一的ID,这是一个外国的ID – SylvainB 2013-02-20 10:54:03

+0

好吧,我明白了。尝试更新的答案。 – muhmud 2013-02-20 11:02:00

0

可以是您使用使用带有OVER()子句SQLFiddle

相关问题