SQL-Update mit case

Zvoni

Erfahrenes Mitglied
Hallo zusammen,

Problemstellung:
DB2-Tabelle, welche unseren Teilestamm repräsentiert.
Ich gebe euch jetzt nur die Felder, welche wichtig sind.
TEFIRM (Firma), TEWKNR(Werk), TETENR (Teilenummer), TESACH (Strat. Sachbearbeiter), TEDISP (Disponent)

Das ganze ist hierarchisch aufgebaut.
Heisst: Ein Teil wird auf Ebene Firma/Werk=1/000 angelegt. Hier wird auch TESACH eingegeben.
Wird ein Teil in einem unserer Werke gebraucht, wird dieses auf das Werk kopiert (Bsp. Firma/Werk=2/050)
Heisst: Eine Teilenummer kann in der Tabelle mehrfach vorkommen, jedoch kann der TESACH nur auf 1/000 geändert werden (Alle untergeordneten Werke "erben" diesen).
Der TEDISP wird aber auf den Werken gepflegt.
Jetzt kommt das Problem:
Wir haben auf der 1/000 (Master-Ebene) TESACH-Einträge mit Mitarbeitern, welche aus der Firma ausgeschieden sind.
TESACH/TEDISP ist wie folgt aufgebaut:
Text - 4 Zeichen lang, erste zwei Zeichen repräsentieren das Werk, drei und vier den Mitarbeiter.
Beispiel: FRZV (wäre Werk "FR" und "ZV" der Disponent).
Mein Ziel ist jetzt, für Werk-Exklusive Teile (Also Teile, welche exklusiv nur in einem Werk laufen) den TESACH zu aktualisieren.
Werk-Exklusive Teile haben immer den gleichen Werks-Präfix in TESACH/TEDISP
Bsp.
TESACH=FRMH (auf 1/000)
TEDISP=FRZV (auf 2/050)

Ziel: TESACH soll jetzt "FRZV" erhalten

Frage: Kann das mit SQL gemacht werde?
Falls meine Problemstellung noch inklar sein sollte, bitte nachhaken

Ich habe hier mal ein wenig rumgedoktert, wollte aber erst eure Meinung hören, bevor ich das Ding auf eine Tabelle mit 130.000 Einträgen loslasse.

UPDATE X500PRDSD/TEIL AS T1
SET T1.TESACH = (CASE WHEN T1.TESACH LIKE 'FR%' THEN
(SELECT T2.TEDISP FROM X500PRDSD/TEIL AS T2 WHERE T2.TEFIRM='2' AND T2.TEWKNR='050') END)
WHERE T1.TEFIRM='1' AND T1.TEWKNR='000' AND T1.TETENR=T2.TETENR

EDIT: Ich bin ein Hornochse!
Dass TESACH nur auf 1/000 gepflegt werden kann, ist eine Sache der GUI, nicht der DB.
Das Feld TESACH wird ja dennoch auf die Werke mitkopiert, nur aus der GUI kann ich es eben nicht ändern. Per SQL ist das Feld ja dennoch offen.

Wäre dann

UPDATE X500PRDSD/TEIL AS T1
SET T1.TESACH = T1.TEDISP
WHERE T1.TESACH LIKE 'FR%' AND T1.TEDISP LIKE 'FR%'

der richtige Ansatz?
Und rein intellektuell würde es mich schon interessieren, ob mein erster Versuch (siehe oben) eigentlich funktioniert hätte.
Würde es dann auf so ändern:

UPDATE X500PRDSD/TEIL AS T1
SET T1.TESACH = (CASE WHEN T1.TESACH LIKE 'FR%' THEN
(SELECT T2.TEDISP FROM X500PRDSD/TEIL AS T2 WHERE T2.TEFIRM='2' AND T2.TEWKNR='050') END)
WHERE T1.TETENR=T2.TETENR
 
Zuletzt bearbeitet:
Zurück