Frage

Mein Chef hat mir einen Auftrag, den ich bin nicht sicher, da nach etwa zwei Wochen möglich ist, kann ich nicht eine Lösung herausfinden, so dass ich diese von der SO für jede Art von Hilfe zu bitten, werfen Gruppe. Wenn dies Ihr Gehirn bricht, entschuldige ich mich.

Ein wenig Hintergrund zuerst: Wir entwickeln die Abfrage einer Datenbank-Anwendung, die Benutzer alles, was sie aus der Datenbank alle SQL, ohne zu wissen wollen, um wieder erlaubt.

Mein Problem: Wir wollen Art und Weise anpassen eine „Distinct“ Auswahl verwendet wird. Anstatt das Schlüsselwort distinct ausgewählt, um die Zeilen gelten hat, wollen wir es nur bestimmte Felder anzuwenden, so dass die ersten Zeilen, die die Felder übereinstimmen gewöhnen. Ein Beispiel:

Bob Jones, 122 Main Street, Portland, OR
Sue Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR
Ralph Smith, 458 32nd Street, Portland, OR

Wir wollen dies so arbeiten, dass nur die ersten Zeilen für jede Adresse zurückgegeben werden, wie folgt:

Bob Jones, 122 Main Street, Portland, OR
Mary Smith, 458 32nd Street, Portland, OR

Mit dem normalen verschieden sind alle vier Zeilen zurückgegeben werden würde, was mehr ist, als wir wollen. Hat jemand irgendwelche Ideen, wie wir dies zu tun gehen kann? Danke.

War es hilfreich?

Lösung

WITH NumberedRows AS (
   SELECT FirstName, LastName, Address,
          ROW_NUMBER() OVER (PARTITION BY Address ORDER BY Id) as RowNumber
   FROM Table
) SELECT FirstName, LastName, Address
  FROM NumberedRows
  WHERE RowNumber = 1;

PARTITION BY Address gibt die Spalte Liste, die Sie gruppieren mögen, und ORDER BY ID zeigt die Spaltenliste Sie den „ersten“ mit Punkt definieren.

(Sicherstellen, dass die vorherige Anweisung durch ein Semikolon beendet.)

Andere Tipps

Sie haben einen regelmäßigen laufen „SELECT DISTINCT“ SQL-Anweisung, die nur Abfragen für die Felder der tatsächlich verschieden zu sein brauchen. Dann, wenn Sie diejenigen zurück, führt eine weitere Abfrage, die den TOP 1 Datensatz nimmt die Daten stimmen mit den nicht-getrennten Felder zu erhalten. Im Moment sehe ich keine Möglichkeit, dies in einer einzigen SQL-Anweisung zu tun ...

SELECT MIN (a.firstname + a.lastname), Adresse von x Group By-Adresse.

Das ist eine zu einfache Antwort, aber es wird Ihren Punkt accross. es wird wieder nur den „kleineren“ Namen für jede einzelne Adresse.

Sie müssen Feldverkettung verwenden, um die Unterschiede als auch zu tun, aber es wird Ihnen, was Sie brauchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top