yo,
zu 1, es sollte unter MSSQL eine funktion ISNULL gegeben, die du für die korrekturwerte benutzen kannst. Beispiel: ISNULL(beginn_korr, beginn). die funktion bewirkt, dass er immer die korrektur-spalte nimmt, es sei den sie ist NULL, dann nimmt er den jeweiligen anderen spaltenwert.
zu 2, würde sich die CASE klausel anbieten, mit der du prüfen kannst, ob das vertrangsende in der zukunft liegt > GEDDATE() und dann entsprechend wie gewünscht verzweigen kannst.
Ilja