2012-12-07 7 views
2

J'ai essayé la meilleure réponse ici: Select count/duplicates Et n'a pas obtenu de résultats précis, peut-être parce que cet exemple est pour un champ?Comptage des lignes avec 2 colonnes en double/correspondantes

J'ai essayé à l'origine, et ne semble pas fonctionner soit:

SELECT T.STATE, T.CITY, COUNT(T2.CITY) 
    FROM (SELECT DISTINCT T.STATE, T.CITY 
      FROM TABLE) T 
LEFT JOIN TABLE T2 ON T2.STATE = T.STATE 
        AND T2.CITY = T.CITY 
GROUP BY T.STATE, T.CITY 

Cela donne des résultats inexacts ainsi. J'essaie d'obtenir le nombre de valeurs dupliquées de 2 champs dans une table.

données Exemple:

Los Angeles, CA, Bob 
New York, NY, Bill 
Los Angeles, CA, Jim 
Los Angeles, CA, Joe 
New York, NY, Gary 
Los Angeles, CA, Roger 

doit retourner:

Los Angeles, CA, 4 
New York, NY, 2 

Suggestions?

Répondre

0

D'après ce que je comprends que vous voulez obtenir tous les enregistrements qui ont un compte> 1.

select T.State, T.City, COUNT(1) 
FROM TABLE T 
GROUP BY T.State, T.City 
HAVING COUNT(1) > 1 
+0

Cette retourne tout avec un compte de 1, ce n'est pas ce qu'il devrait être. –

+0

Etes-vous sûr? Le compte de HAVING (1)> 1 devrait signifier seulement le retour quand le compte est plus grand que 1. Êtes-vous sûr que vous avez eu le droit? – Greg

0
SELECT T.STATE, T.CITY, COUNT(*) as cnt 
FROM Table X T 
GROUP BY T.STATE, T.CITY 
HAVING COUNT(*)>1 

Si l'entrée est pas exacte, vous pouvez essayer

SELECT RTRIM(LTRIM(T.STATE)), LTRIM(RTRIM(T.CITY)), COUNT(*) as cnt 
FROM Table X T 
GROUP BY RTRIM(LTRIM(T.STATE)), LTRIM(RTRIM(T.CITY)) 
HAVING COUNT(*)>1 
+0

Cela retourne tout avec un compte de 1, ce n'est pas ce qu'il devrait être. –

1
DECLARE @TABLE TABLE(
    CITY VARCHAR(100), 
    [STATE] CHAR(2), 
    NAME VARCHAR(50) 
) 

INSERT INTO @TABLE VALUES 
('Los Angeles', 'CA', 'Bob'), 
('New York', 'NY', 'Bill'), 
('Los Angeles', 'CA', 'Jim'), 
('Los Angeles', 'CA', 'Joe'), 
('New York', 'NY', 'Gary'), 
('Los Angeles', 'CA', 'Roger') 

SELECT CITY,[STATE],COUNT(*) [COUNT] 
FROM @TABLE 
GROUP BY CITY,[STATE] 
HAVING COUNT(*) > 1 


--if there are erroneous white spaces and inconsistant case, and collation is case sensitive use this 
DELETE FROM @TABLE 
INSERT INTO @TABLE VALUES 
(' Los Angeles', 'CA', 'Bob'), 
('New York', 'NY', 'Bill'), 
('Los ANgeles ', 'CA', 'Jim'), 
('LOS Angeles', 'CA', 'Joe'), 
('New YorK ', 'NY', 'Gary'), 
(' Los Angeles ', 'CA', 'Roger') 

SELECT RTRIM(LTRIM(UPPER(CITY))) [CITY] ,RTRIM(LTRIM(UPPER([STATE]))) [STATE],COUNT(*) [COUNT] 
FROM @TABLE 
GROUP BY RTRIM(LTRIM(UPPER(CITY))),RTRIM(LTRIM(UPPER([STATE]))) 
HAVING COUNT(*) > 1 
Questions connexes