2009-07-21 19 views
2

Ich habe eine Tabelle mit Staat, Stadt, Stadt und Postleitzahl. Die Postleitzahl weist doppelte Daten auf, da einige Postleitzahlen mehrere Städte enthalten. Jetzt brauche ich eine Abfrage, um alle 4 Spalten zurückzugeben, aber ich möchte nicht die Postleitzahl in den Ergebnissen wiederholen. Ich möchte nur 1 Datensatz pro Postleitzahl zurückgeben. Wo es mehrere Städte gibt, möchte ich in den Ergebnisdatensätzen "-----------" zurückgeben, um mehrere Städte anzugeben.Distinct Werte

Wie kann ich das tun?

Antwort

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

Edit:, wenn Sie auch in anderen Bereichen wie der Staat zurückkehren wollen, fügen Sie einfach auf zB:

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

ich die Postleitzahlen unter der Annahme, kann nur einer Stadt in Beziehung gesetzt werden und Zustand.

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

so etwas? Nicht sicher, wie effizient es gegenüber anderen Optionen ist.

EDIT: Ich stimme zu, dass COUNT eine klarere Möglichkeit ist, diese

auszudrücken