zurückgeben Ich habe eine Datenbank mit Elementen, die jede verfügbare Sorte eines bestimmten Elements in einer separaten Zeile speichert. Nur durch die Itemnamen gehen, sehen die Datenbankeinträge wie folgt aus:Versuchen, nur einen Typ jedes Elements aus der Datenbank
10316-00-B
10316-00-M
10316-02-B
10316-03-B
10316-04-B
10316-23-B
10316-88-B
... wo „10316“ ist der eigentliche Punkt, und dann alles nach, dass eine bestimmte Sorte Typ darstellt. Ich möchte eine Abfrage schreiben, die nur einen Datensatz für Element "10316" (oder was auch immer) zusammen mit den Informationen, die diesem Element in allen anderen Tabellenspalten zugeordnet sind, zurückgibt und den Rest ignoriert. So würde ich den Rekord für den Artikel "10316-00-B" bekommen, aber keinen der anderen. Dieser Prozess wird für alle anderen von meiner Abfrage zurückgegebenen Elemente wiederholt.
Ich bin nicht wählerisch über welches Element einer bestimmten Gruppe zurückgegeben wird; der obere würde tun. Ich sehe nur eine Auflistung für die Artikel 10316, 10317, 10318 und weiter, anstatt für jeden Artikel und jede Variation.
Ich habe versucht, DISTINCT links (columnName, 5), aber das filtert nicht die Datensätze, wie ich brauche. Weiß jemand, wie man das macht? Ich benutze Sql Server 2008 R2.
UPDATE: Ich versuche, die von @ mo2 zur Verfügung gestellte Lösung zu implementieren - es scheint, dass diese am ehesten alle Daten für ein bestimmtes Element zurückgibt, was ich will. Leider bekomme ich den Fehler "Für die Spalte 1 von 't' wurde kein Spaltenname angegeben, und ich bin mir nicht sicher, wie ich das korrigieren soll. Meine Version seiner Abfrage sieht wie folgt aus:
SELECT * FROM (
select left(item, 5), col1, col2, ... , row_number()
over (partition by LEFT(item, 5) order by item) rn
from Table
) t
where rn = 1
FINAL UPDATE: Ich habe die Antwort von @kbball als Lösung markiert, aber eigentlich sollte mo2 auch zu @ Kredit gehen. Die Antwort von @kbball hat mir geholfen, die Antwort von @ mo2 zu verstehen.
ich Ihre Lösung bin versucht, aber ich bin nicht sicher, was die „t“ soll nach der schließenden Klammer sein. Ich erhalte den Fehler "Für Spalte 1 von 't' wurde kein Spaltenname angegeben." – bmurrell30
Das "t" ist nur ein Alias für die Sub-Abfrage, die ich denke, SQL-Server benötigt. Sie können versuchen, die Unterabfrage allein auszuführen, um zu verstehen, wie sie funktioniert. Nicht sicher, warum Sie den Fehler erhalten, ohne die Abfrage zu sehen. – mo2