Werte aktualisieren aus zweiter Tabelle.

AugsteTo

Benutzer
Beiträge
7
Hallo zusammen,

ich versuche derzeit einen query zum Updaten einer bestehenden Tabelle aufzubauen. Ziel ist es, Bauteile in Tabelle A mit Tabelle B zu vergleichen und die richtige Teilenummer aus dieser dann einzutragen. In Tabelle B sind die Werte dynamisch und können sich jederzeit ändern, daher der Verweis auf diese.

Hierzu habe ich in Zeile 13 versucht dies entsprechend aufzubauen, jedoch ohne Erfolg, der Wert aus Herstellertype wird nicht in Tabelle A geschrieben.


1 UPDATE [xyz_DB].[dbo].[Tabelle_A]
2 SET [Herstellertype.] =
3
4 CASE
5 -- DZH-32-40-PPV-A
6 WHEN [Description] LIKE '%DZH-32-40-PPV-A%'
7 THEN '807461' <--- Werte werden geschriebn.
8 WHEN [Supplier article number] LIKE '%14042%'
9 THEN '807461'
10
11 -- DFM-32-50-P-A-GF
12 WHEN [Description] LIKE '%DZH-32-40-PPV-A%'
13 THEN (SELECT Material FROM dbo.[Tabelle_b] WHERE Herstellertype = '807461') <--- Werte werden nicht geschrieben
14 WHEN [Supplier article number] LIKE '%14042%'
15 THEN '807461'
16 ELSE 'No Match'
17 END

Welchen Lösungsansatz könnt ihr mir empfehlen bzw. was wäre hier der richtige Weg?

Viele Grüße
Tobi
 

Anhänge

  • UpdateQuery.txt
    469 Bytes · Aufrufe: 1
Werbung:
Da ist auf jeden Fall ein Punkt falsch in Zeile 2.

Das Update ist aber generell komisch, eine gute Gelgenheit das zu verbessern. Ich würde nicht immer die ganze Tabelle aktuallisieren wollen sondern nur die Datensätze die auch Treffer haben aber dann kommt natürlich kein "No Match". Nur wenn man das CASE mal ausbaut und nicht für jede Zeile einen eigenen Select auf die Quelltabelle macht wird das ganze etwas klarer, ich hab das mal umgestellt:
Code:
UPDATE    [Tabelle_A]
SET    [Tabelle_A].[Herstellertype] = isnull([Tabelle_B].Herstellertype,'No Match')
FROM    [Tabelle_A]
LEFT JOIN [Tabelle_B]
ON (    [Tabelle_A].[Description] LIKE '%DZH-32-40-PPV-A%'
OR    [Tabelle_A].[Supplier article number] LIKE '%14042%' )
AND    [Tabelle_B].Herstellertype = '807461'
Zugegeben ein komischer Join. Aber das was du machst sieht aus als würdest du viele solcher Update-Vorgänge für verschiedene Herstellertypen machen und dabei immer identische Werte an mehreren stellen im Code tauschen, das scheint mir unglücklich.

Wiso werden eigentlich so viele Nummern als Zeichenkette gespeichert?
 
Danke für die Antwort und dein Codebeispiel. Ich möchte versuchen, etwas genauer zu erklären, was ich versuche.

Ausgangslage:
Tabelle A ist ein Export aus einem Lager mit 27.890 Artikeln, in dem viele verschiedene Hersteller und ihre Teilebezeichnungen aufgelistet sind.

In Tabelle B sind 10.400 Artikel (komplettes Produktportfolio) eines Herstellers.

Nun möchte ich übereinstimmungen matchen und die entsprechenden Herstellernummern per UPDATE in die Liste eintragen. Hier war mein Gedanke, dies per LIKE '%xyz%' umzusetzen.

Da ich so etwas bisher nicht umgesetzt habe, bin ich über jeden Denkanstoss, wie man so etwas aufbaut, sehr dankbar.

Gruß
Tobias
 
Und was machst du mit der Info in der Datenbank anschließend?
In wie weit ist das für einen weiteren Ablauf notwendig?
Wenn das ganze nur für einen Bericht oder als Information dient dann ist es wichtig zu verstehen wo diese Information später angezeigt werden soll.
Grüße
 
Und was machst du mit der Info in der Datenbank anschließend?
In wie weit ist das für einen weiteren Ablauf notwendig?
Wenn das ganze nur für einen Bericht oder als Information dient dann ist es wichtig zu verstehen wo diese Information später angezeigt werden soll.
Grüße
Ich möchte die Liste des Lagerexportes mit ERP-Artikelnummern anreichen, damit wir wissen, welche Bauteile im Lager sind.

Siehe Bild, ich suche mit LIKE '%DPZJ-32-80-P-A-S2%' die Liste ab und möchte, falls es eine Übereinstimmung gibt, die ERP-Artikelnummer in die Zeile "Matching" schreiben.

Da wir von dem Hersteller 10.400 Artikelnummer haben, benötige ich eine Vorgehensweise wie jede einzelne Artikelnummer geprüft werden kann.
 

Anhänge

  • 1.png
    1.png
    15 KB · Aufrufe: 6
Das bedeutet es würde dir auch reichen wenn die Daten einfach bei der Darstellung zur Verfügung stehen.
Mit anderen Worten wenn es beim SELECT zusammengeführt wird und für den Bericht bereitsteht, bräuchtest du es gar nicht in die Datenbank zu schreiben?! - Dann sollte man das auch nicht rüber schreiben - also kein Update.
 
Doch, ich möchte, dass die ERP-Artikelnummer dann in Tabelle A in das Feld "Matching" geschrieben wird, wenn es eine Übereinstimmung zwischen Herstellertype und Description gibt.

Da wir mehrere Lieferantenlisten haben, möchte ich Tabelle A nacheinander mit diesen abgleichen und die entsprechende ERP-Nummer herausfinden und eintragen.
 
Wenn es viele Artikelnummern betrifft würde ich es erst recht mit einem Join versuchen statt sehr viel Copypaste Code und potenziellen Fehlerquellen. Es wäre enorm hilfreich wenn du irgendwie von [Description] LIKE '%DZH-32-40-PPV-A%' auf Herstellertype = '807461' schließen könntest, gibt es da irgendeine Tabelle die man anzapfen kann?
 
Wenn es viele Artikelnummern betrifft würde ich es erst recht mit einem Join versuchen statt sehr viel Copypaste Code und potenziellen Fehlerquellen. Es wäre enorm hilfreich wenn du irgendwie von [Description] LIKE '%DZH-32-40-PPV-A%' auf Herstellertype = '807461' schließen könntest, gibt es da irgendeine Tabelle die man anzapfen kann?
Das wäre dann die Tabelle B, diese ist mit allen Herstellerdaten versehen und man kann es sich als Katalog vorstellen.
 
Das wäre dann die Tabelle B, diese ist mit allen Herstellerdaten versehen und man kann es sich als Katalog vorstellen.
Ich denke, ich benötige hier pro Artikelnummer einen eigenen Code schnipsel, der dann die Artikelnummern abfragt und einträgt, und dann bei der nächsten Artikelnummer das Gleiche vornimmt … diese kann ich relativ einfach mit Excel konfigurieren.

Ich bin mir gerade nur nicht sicher, wie ich das im code aufbaue.
 
Werbung:
Okay also bei deinem Ausgangscode hast du [Tabelle_A].[Description] LIKE '%DZH-32-40-PPV-A%' als Vorbedingung, kannst du mal ein Beispiel geben was genau in Descrition steht? Stehen da noch mehr von diesen DZH Nummern oder stehen die in einem Text (an der selben Stelle)?

Und wie erschließe ich das DZH-32-40-PPV-A dann Herstellertype 807461 in Tabelle B entspricht? Das ist nicht selbsterklärend. Oder steht in Tabelle B auc irgendwo DZH-32-40-PPV-A drin oder lässt sich zusammen setzen?
 
Zurück
Oben