Eine Tabelle enthält eindeutige Datensätze für ein bestimmtes Feld (FILENAME). Obwohl die Datensätze eindeutig sind, handelt es sich tatsächlich nur um Duplikate, an die nur Text angehängt ist. Wie können Sie ähnliche oder ähnliche Datensätze zurückgeben und gruppieren und die leeren Felder aktualisieren?Gibt alle Datensätze zurück, bei denen ein Feld denselben Wert plus zusätzlichen Text hat
Die folgende Tabelle ist typisch für die Datensätze. Jeder Datensatz hat einen Dateinamen, aber es ist kein Schlüsselfeld. Es gibt einen Datenbankdatensatz mit Metadaten, die ich füllen möchte, um Metadaten zu dokumentieren, die nur durch die ersten n Zeichen identifiziert werden können.
Die Variable ist der ursprüngliche Dateiname ändert sich immer Zeichenlängen. Die Konstante ist, dass das Präfix immer gleich ist.
FILENAME / DWGNO / PROJECT
52349 / 52349 / Ford
52349-1.dwg/ /
52349-2.DWG/ /
52349-3.dwg/ /
52351 / 52351 / Toyota
52351_C01_REV- / /
52351_C01_REV2-/ /
123 / 123 / Nissan
123_rev1 / /
123_rev2 / /
123_rev3 / /
sollte die Tabelle wie folgt aussehen.
FILENAME / DWGNO / PROJECT
52349 / 52349 / Ford
52349-1.dwg / 52349 / Ford
52349-2.DWG / 52349 / Ford
52349-3.dwg / 52349 / Ford
52351 / 52351 / Toyota
52351_C01_REV-/ 52351 / Toyota
52351_C01_REV2-/ 52351 / Toyota
123 / 123 / Nissan
123_rev1 / 123 / Nissan
123_rev2 / 123 / Nissan
123_rev3 / 123 / Nissan
Ich versuchte zunächst, sich selbst auf den Tisch zu verbinden und die Länge überprüfen, aber „LEFT (Dateiname, 10)“ nicht alle Ergebnisse zurück.
USE MyDatabase
SELECT x.DWGNO AS X_DWGNO,
y.DWGNO AS Y_DWGNO,
x.FILENAME AS X_FILENAME
y.FILENAME AS Y_FILENAME
x.DWGTITLE,
x.REV,
x.PROJECT
FROM dbo.DocShare x
-- want all the files from the left table... I think
LEFT JOIN dbo.DocShare y
ON LEFT(FILENAME LEN(CHARINDEX('.', FILENAME 1))) = LEFT(FILENAME, 10)
Auch etwas anderes versucht, basierend auf einem ähnlichen Beitrag, aber es funktioniert auch nicht wirklich.
USE MyDatabase
SELECT X.E_DWGNO,
y.DWGNO AS Y_DWGNO,
x.FILENAME AS X_FILENAME
y.FILENAME AS Y_FILENAME
x.DWGTITLE,
x.REV,
x.PROJECT
FROM dbo.DocShare x
WHERE EXISTS(SELECT x.FILENAME
FROM dbo.DocShare
WHERE x.FILENAME = LEFT(y.FILENAME LEN(CHARINDEX('.', y.FILENAME, 0))))
ORDER BY y.FILENAME
das Hauptproblem ist die erste nicht-numerischen Zeichen in Spalte DATEI zu finden .... – CeOnSql
mit 'LIKE' für Dateinamen Vergleich gefährlich ist, wenn Sie Datei 52349 und 5234 haben – Eric