2011-11-28 72 views
0

我有一个包含引用和名称的表。数据存在一些问题,即有超过2个不同的名称作为不允许的参考。SQL Server组通过

是否有快速查询,我可以编写查找所有具有多个关联名称的引用?

对不起,我只想澄清:

我可以有很多名字,并多次提到,但在每次参考相关的只有一个名字。如果有两个不同的名称与单个参考相关联,我需要显示这些名称。然后

+1

修复您的数据后,请确保您应用适当的约束来防止将来再次插入此损坏的数据。 –

回答

1

您可以将它通过referenceand选择所有具有项不止一个:

select reference, count(*) 
from myTable 
group by reference 
having count(*) > 1; 
0

查询:

SELECT reference, COUNT(name) 
FROM @table 
GROUP BY reference 
HAVING COUNT(name) > 1 

的样本数据:

declare @table table(reference varchar(5), name int) 
INSERT INTO @table values('Ref#1', 1) 
INSERT INTO @table values('Ref#1', 2) 
INSERT INTO @table values('Ref#2', 3) 
INSERT INTO @table values('Ref#2', 3) 
INSERT INTO @table values('Ref#3', 4) 

输出:

| Ref#1 | 2 | 
| Ref#2 | 2 | 
+0

这将工作,但相同的名称和参考可能会出现不止一次。但是,只能出现一个不同的名称和参考。 – Paul

+0

你的意思是说,当你在同一时间有两个具有相同参考和名称的行时,这是不可能的? – sll

0

我设法这样的:

SELECT ref, COUNT(name) 
FROM table 
GROUP BY ref 
HAVING COUNT(DISTINCT(name)) > 1 
+0

如果你使用'HAVING COUNT(DISTINCT name)> 1',那么也使用'SELECT ref,COUNT(DISTINCT name)' –

+1

而'DISTINCT'不是一个函数,在'name'周围不需要括号 –

0

好吧,如果特定参考最小的名称和最大的名称是不同的,那么就必须与参考相关联的至少两个名字:

SELECT Reference, MIN(Name), MAX(Name) 
FROM Table 
GROUP BY Reference 
HAVING MIN(Name) < MAX(Name)