2017-06-03 4 views
0

Ich habe eine Datenbank mit allen Städten der Welt.SQL: lösche doppelte Zeilen mit Klausel

und wenn ich this Abfrage ausführen kann ich sehen, es gibt Doppelzimmer:

enter image description here

ich diese Abfrage bereits verwendet, um alle doppelten Zeilen zu löschen:

WITH CTE AS 
(
SELECT *,ROW_NUMBER() 
OVER (PARTITION BY Country, City, AccentCity, Region, Population, latitude, Longitude 
ORDER BY Country, City, AccentCity, Region, Population, latitude, Longitude) AS RN 
FROM ExperimentWorld 
) 

DELETE FROM CTE WHERE RN<>1 

würde ich jetzt wieder laufen und lösche alle Spalten, in denen latitude und Longitude gleich sind und wenn zwei Zeilen die gleichen wie im obigen Bild sind, möchte ich diejenige behalten, wo population einen Wert hat und löschen das mit population '0'

+0

hinzufügen where-Klausel. Löschen von cte wo ... Population <1 und .... – scsimon

Antwort

2

Diese Abfrage -

;WITH CTE 
AS (
    SELECT * 
     ,ROW_NUMBER() OVER (
      PARTITION BY Country 
      ,City 
      ,AccentCity 
      ,Region 
      ,Population 
      ,latitude 
      ,Longitude ORDER BY Population DESC 
      ) AS RowNum 
    FROM ExperimentWorld 
    ) 
DELETE 
FROM CTE 
WHERE RowNum > 1 
+0

Ja, es funktionierte, ich hatte bearbeiten und wählen Sie nur 'Breite, Länge' –