Benutzer mit den meisten Antworten
Wie kann man mit T-SQL alle Werte in einer Spalte finden, die bis auf die letzten n Zeichen übereinstimmen?

Frage
-
Hallo zusammen,
ich möchte mit Hilfe einer SQL-Abfrage in einer Tabelle alle Werte aus einer Spalte 'Produkt' finden, die bis auf die letzten n Zeichen übereinstimmen.
Beispiel:
Produkt
100020011
100030011
100020012wird für das Beispiel n = 2 gesetzt, so sollte das Ergebnis wie folgt aussehen:
Produkt
100020011
100020012Kann mir hier jemand auf die Sprünge helfen?
Gruß
Jürgen
Antworten
-
Hi Jürgen,
wie wäre es damit?WITH temptab as (Select Left(Spalte1,len(Spalte1)-2) AS S1 FROM DemoTab) SELECT * FROM DemoTab WHERE Left(Spalte1,len(Spalte1)-2) IN (SELECT S1 FROM temptab GROUP BY S1 HAVING Count (1) > 1)
Das bringt für Deine Demodaten genau das genannte Ergebnis.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Jürgen Sch Dienstag, 9. Oktober 2018 10:50
Alle Antworten
-
Hallo bfuerchau,
danke für die Antwort. Nur ganz so einfach ist nun mal nicht. Das mit dem Like ist mir schon klar, nur muss dafür die Länge der Nummer bekannt sein.
Ich dachte an folgendes:
WHERE [Produkt] LIKE (LEFT([Produkt], LEN([Produkt]) - n) + '%')sowas in der Form???
-
Hi,
wie soll das gehen? Letztendlich würde dann 1000300 auch kommen, da 100030011 der Abfrage auch entsprechen würde.
Wenn man das so eingrenzen kann, dass mind. zwei Entsprechungen existieren müssen oder der Anfang der Nummer auch bekannt ist, wäre das machbar aber ohne weitere Kriterien eher nicht.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hallo Jürgen,
das hilft auch nicht, da die Definition auch alle Werte bringt, bei denen es nur einen Datensatz gibt. Der Wert stimmt immer mit den ersten 7 (x) Stellen überein!
Also nochmal die Frage: Kann man das noch weiter eingrenzen? Oder müssen mind. zwei Datensätze vorhanden sein, die das Kriterium erfüllen?
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hi Jürgen,
wie wäre es damit?WITH temptab as (Select Left(Spalte1,len(Spalte1)-2) AS S1 FROM DemoTab) SELECT * FROM DemoTab WHERE Left(Spalte1,len(Spalte1)-2) IN (SELECT S1 FROM temptab GROUP BY S1 HAVING Count (1) > 1)
Das bringt für Deine Demodaten genau das genannte Ergebnis.
--
Viele Grüsse
Peter Fleischer (ehem. MVP für Developer Technologies)
Meine Homepage mit Tipps und Tricks- Als Antwort markiert Jürgen Sch Dienstag, 9. Oktober 2018 10:50
-
Hallo Peter,
ich grüße dich. Lange nichts voneinander gehört/gelesen :-)
Donnerlüttchen, deine Abfrage passt wie die Faust aufs Auge. Danke!
Danke auch an alle anderen.
Gruß
Jürgen
@Peter: schau doch bitte mal in meinen Post mit der komplexen Abfrage hinsichtl. der Kommunikationskreise
-
Hallo Jürgen,
freut mich, dass es mit Peters Antwort klappt.
Dennoch wäre es hilfreich gewesen, mal Antworten auf gestellte Rückfragen zu geben. Letztendlich ist es genau das, was ich gefragt hatte: Es muss mehr als ein Datensatz existieren.
Gruß, Stefan
Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport -
Hallo Stefan,
sorry, aber das hat sich alles überschnitten, da parallel das Ganze noch an meinem richtigen Projekt (Datenbank) versuche umzusetzen.
Aber vielleicht kannst du mir dabei helfen, basierend auf der Ausgabe des Ergebnisses von Peter, die Ausgabe so zu verändern, dass die zueinander gefundenen "Blöcke" separat in einer Spalte stehen, wie folgende Abb. zeigt:
Dafür hatte ist die Grundtabelle um die weiteren Werte erweitert.
Es wäre schön, wenn du mir dafür einen Ansatz geben könntest.
Gruß
Jürgen