Oracle - Eindeutige Werte aus einer einzelnen Spalte, aber wieder andere Spalten
Ich versuche, herauszufinden, wie pull wählen Sie Werte aus einer Spalte der Tabelle, aber wieder andere Ergebnisse als gut. Zum Beispiel sagen, ich habe die folgende Tabelle
person ..........
------------------
bob ..........
mary ..........
bob ..........
sue ..........
Was ich will, wieder zurück ist
bob ..........
mary ..........
sue ..........
In diesem Fall ist mir egal, welche Werte ich eigentlich zurück zu erhalten, für bob von der anderen Spalten, wie sollte ich das tun?
Follow-up-Frage, was ist, wenn ich kümmerte sich aber? Was, wenn ich diese Tabelle
person type color ..........
----------------------------------
bob 0 blue ..........
mary 1 green ..........
bob 1 red ..........
sue 0 yellow ..........
Und dieses mal möchte ich erneut einzigartige Menschen, aber ich möchte die Ergebnisse für bob, wenn sein Typ ist 0, also für ihn würde ich sehen,
bob 0 blue ..........
mary 1 green ..........
sue 0 yellow ..........
Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie analytische Funktionen wie RANG, um zu beschreiben, die den Algorithmus für die Zeile, die Sie behalten wollen und dann etwas tun, wie
Dieser gibt die "erste" Zeile für jede person, wo "first" wird bestimmt durch die Zeile mit dem niedrigsten Wert TYP.
Einer Sache bewusst sein, wenn Sie beginnen, ranking Zeilen ist, dass es drei verschiedene Analyse-Funktionen-RANK, DENSE_RANK und ROW_NUMBER -, dass alle im Grunde die gleiche Sache, sondern handle Beziehungen anders. RANG ist der standard-Leichtathletik-ranking-Funktion-- wenn es zwei Zeilen, die Krawatte für den ersten Platz (also zwei Zeilen, in denen die PERSON='bob' and TYPE=0), Sie würde beide erhalten den Rang 1, während die nächste Reihe bekommen würde, einen Rang von 3, so würde es keine "zweite Platz" - Reihe. In der gleichen situation, DENSE_RANK auch jeweils gleich viele Zeilen, die einen Rang von 1, aber würde geben Sie die nächste Zeile ein Rang 2. ROW_NUMBER würde willkürlich geben gefesselt Zeilen, die einen Rang von 1, geben die anderen einen Rang von 2, und geben Sie die Dritte Zeile, die einen Rang von 3. Natürlich können Sie die Bande brechen, die durch hinzufügen von zusätzlichen Spalten in die ORDER BY-Klausel.
Alternative syntax, Generic SQL für DBs, die nicht über RANG