2016-06-20 13 views
0

Ich versuche, eine Tabelle zu sortieren, so dass Duplikate auf es basiert auf zwei verschiedenen Spalten angezeigt Dont (MODEL_NUMBER und YEAR_INTRODUCED)Auswählen eindeutige Zeilen basierend auf mehreren Spalten, aber nicht alle

Gerade jetzt meine Frage, wie bestimmt:

cmd = @"Select * From ARCHIVE_DECADE_TBL WHERE DECADE_" + decade + @"[email protected] AND [email protected] AND QUANTITY is not null AND QUANTITY <> 0 ORDER BY PRODUCT_NAME;"; 

Hier ist das Tabellenlayout:

ARCHIVE_ID MODEL_NUMBER YEAR_INTRODUCED LOCATION 
1001   B10    1989    SKID 43 
1002   B10    1989    SKID 48 
1003   B10    1989    SKID 73 

die ARCHIVE_ID ist der Primärschlüssel. Soll ich eine Gruppe benutzen? Wenn ich eine Gruppe verwende, bei der ARCHIVE_ID bleiben würde?

+0

Es hängt von der ** Aggregatfunktion zu tun ** (min, max, zählen, ...), die archive_id würde bleiben. – maraca

Antwort

1

Hängt vom gewünschten Ergebnis ab.

Wenn die resultset enthält nur MODEL_NUMBER und YEAR_INTRODUCED, können Sie einfach verschiedene verwenden:

SELECT DISTINCT 
    MODEL_NUMBER, 
    YEAR_INTRODUCED 
FROM ARCHIVE_DECADE_TBL 

Wenn Sie das Ergebnis mögen, dass andere Spalten enthalten, müssen Sie entscheiden, welche Werte Sie bis zu zeigen. Da Sie nur eine Zeile pro eindeutiger Paarung haben, können Sie nur einen Wert aus den anderen Spalten anzeigen. Welchen willst du zeigen? Und müssen die Werte aus derselben Zeile kommen?

Man könnte so etwas wie

SELECT MIN(ARCHIVE_ID), 
     MODEL_NUMBER, 
     YEAR_INTRODUCED, 
     MIN(LOCATION) 
FROM  ARCHIVE_DECADE_TBL 
GROUP BY MODEL_NUMBER, 
     YEAR_INTRODUCED 

tun ... wenn Sie kümmern sich nicht, wenn die Werte aus der gleichen Reihe kommen.

Wenn Sie kümmern zu tun, haben Sie etwas ein wenig komplizierter, wie

SELECT A.* 
FROM ARCHIVE_DECADE_TBL A 
JOIN (SELECT MIN(ARCHIVE_ID), 
       MODEL_NUMBER, 
       YEAR_INTRODUCED 
     FROM  ARCHIVE_DECADE_TBL 
     GROUP BY MODEL_NUMBER, 
       YEAR_INTRODUCED) B 
ON  A.ARCHIVE_ID = B.ARCHIVE_ID 
+0

Wenn ich die zweite Option versuche, ändert die Abfrage den Spaltennamen von LOCATION zu Expr1000, weißt du, wie ich das lösen kann? –

+0

Sie müssen einen Spaltenalias hinzufügen, z. Wenn Sie die Spalte MIN_LOCATION benennen möchten, würden Sie 'SELECT MIN (LOCATION) MIN_LOCATION FROM usw. 'verwenden –

Verwandte Themen