2011-11-28 9 views
0

J'ai une table qui contient une référence et un nom. Il y a quelques problèmes avec les données où il y a plus de 2 noms distincts pour une référence qui n'est pas autorisée.Groupe SQL Server Par

Existe-t-il une requête rapide que je peux écrire pour trouver toutes les références qui ont plus d'un nom associé?

Désolé, pour préciser:

je peux avoir beaucoup de noms, et de nombreuses références, mais un seul nom associé à chaque référence. S'il y a 2 noms différents associés à une seule référence, j'ai besoin de les montrer.

+1

Une fois que vous avez corrigé vos données, veillez à appliquer les contraintes appropriées pour éviter que ces données brisées ne soient à nouveau insérées dans le futur. –

Répondre

1

Vous pouvez regrouper par referenceand puis sélectionnez toutes les entrées qui ont plus d'un:

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

Requête:

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

données de l'échantillon:

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) 

Sortie:

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

Cela fonctionnerait, mais le même nom et la même référence peuvent apparaître plus d'une fois. Cependant, seul un nom et une référence distincts peuvent apparaître. – Paul

+0

Vous voulez dire que ce n'est pas possible quand vous avez deux lignes avec la même référence et le même nom dans le même temps? – sll

0

Je géré comme ceci:

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

Si vous utilisez 'HAVING COUNT (nom DISTINCT)> 1', utilisez également' SELECT ref, COUNT (nom DISTINCT) ' –

+1

Et' DISTINCT' n'est pas une fonction, les parenthèses ne sont pas nécessaires autour de 'name' –

0

Eh bien, si le nom minimal et nom maximal pour une référence particulière sont différentes, il doit y avoir au moins deux noms associés à cette référence:

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