Hallo,

ein Artikel hat mehrere verschiedene Gewichtungswerte abhängig vom Typ.
Die Tabellenstruktur sieht wie folgt aus
Artnr | Jahr | Typ | Wert

Der Schlüssel ist Artnr, Jahr, Typ

Ich möchte numerische Werte innerhalb eines Jahres von einem Typ in den Nächsten übertragen mit einer Veränderung (teilweise Addition, teilweise Subtraktion).

Mein erster Versuch des Updates vom Typ 2 in den Typ N sah wie folgt aus:
Code:
update table as a
set a.Wert=(
             (select b.Wert from table as b
              where b.Jahr = 2020 and b.Typ = '2'  and
                    a.Jahr =  b.Jahr and a.Artnr = b.Artnr
             )+1.8
           )
where a.Jahr = 2020 and a.Typ = 'N'
Dieses Update hat aber nicht immer fuktioniert und ist manchmal in einen Fehler
Code:
Nullwerte für Spalte oder Variable WERT nicht zulässig.
gelaufen.

Nach mehreren Versuchen habe ich nun diesen Update zusammengebaut:
Code:
update table as a
set a.Wert=(
             (select b.Wert from table as b
              where b.Jahr = 2020 and b.Typ = '2'  and
                    a.Jahr =  b.Jahr and a.Artnr = b.Artnr
             )+1.8
           )
where a.Jahr = 2020 and a.Typ = 'N' and
      exists(select b.Wert 
             from table as b
             where b.Jahr = 2020 and b.Typ = '2'  and
                   a.Jahr = b.Jahr and a.Artnr = b.Artnr
            )
Hier meine Fragen:
Ist der doppelt verwendete Alias "b" korrekt?
Ist durch die Verknüpfung im Subselect der SET-Klausel nicht gewährleistet, dass a und b eindeutig verbunden sind und daraus folgend Variante 1 ausreichend?
Wenn ich den Subselect alleine ausführe kommen zwar Werte wie 0,00 aber keine NULL Werte. Daraus habe ich geschlossen, dass nur zulässige Werte geschrieben werden. Woher kommen dann die Nullwerte?

Grüße

Marc