2009-07-21 3 views
2

J'ai une table avec l'état, la ville, la ville et le code postal. Le code postal a des données en double puisque certains codes postaux ont plusieurs villes. Maintenant, j'ai besoin d'une requête pour retourner toutes les 4 colonnes, mais je ne veux pas répéter le code postal dans les résultats. Je veux seulement retourner 1 enregistrement par code postal. Là où il y a plusieurs villes, je voudrais retourner "-----------" dans les résultats pour indiquer plusieurs villes.Distinctions

Comment est-ce que je peux faire ceci?

Répondre

2
SELECT CASE WHEN COUNT(Town) > 1 THEN '-----' ELSE MIN(Town) END AS Town, Zip 
FROM YourTable 
GROUP BY Zip 

Edit: si vous voulez aussi revenir d'autres domaines comme l'État, il suffit d'ajouter le par exemple:

SELECT 
    CASE WHEN COUNT(Town) > 1 THEN '-----' ELSE MIN(Town) END AS Town, 
    CASE WHEN COUNT(Town) > 1 THEN '-----' ELSE MIN(State) END AS State, 
    Zip 
FROM YourTable 
GROUP BY Zip 
0

Je suppose que les codes postaux ne peuvent être liés à une ville et Etat.

SELECT State 
, City 
, CASE WHEN MAX(Town) <> MIN(Town) THEN '-------' ELSE MAX(Town) END as Town 
, ZipCode 
FROM data 
GROUP BY State, City, ZipCode 

quelque chose comme ça? Je ne sais pas à quel point il est efficace contre d'autres options.

EDIT: Je suis d'accord que COUNT est un moyen plus clair d'exprimer cela