sql update in Abhängigkeit zum Datensatz

krameger

Benutzer
Beiträge
6
Hallo

In meiner DB stehen 2 Datums-Felder
Fertig-Geplant Fertig-Erreicht

In Fertig-Geplant werden geplante Termine eingetragen, Fertig-Erreicht bleibt vorerst leer.

Täglich soll ein Script alle Zeilen analysieren und wenn das Fertig-Geplant Datum<=HEUTE, dann das Fertig-Geplant Datum in Feld Fertig-Erreicht eintragen.

ZB
Fertig-Geplant Fertig-Erreicht
02.03.2018 null
03.03.2018 null
04.03.2018 null

"update Tabelle set Fertig-Erreicht ....."
soll in allen Zeilen, bei denen das Fertig-Geplant Datum<=Heute-Datum ist, den Wert aus Fertig-Geplant in Feld Fertig-Erreicht eintragen.

Fertig-Geplant Fertig-Erreicht
02.03.2018 02.03.2018
03.03.2018 null
04.03.2018 null

Morgen schaut's dann so aus:
Fertig-Geplant Fertig-Erreicht
02.03.2018 02.03.2018
03.03.2018 03.03.2018
04.03.2018 null

Ist das mit einer "update" Zeile realisierbar?

Freundliche Grüße
Gerold
 
Werbung:
Ja, aber unsinnig. Für alle Tage vor Fertig-Geplant ist Fertig-Erreich NULL, ab dann gleich dem Fertig-Geplant. Kann man sich sparen.
 
Man könnte es auch im Select anpassen
Code:
SELECT Fertig-Geplant,(CASE WHEN Fertig-Erreicht IS NULL AND Fertig-Geplant <= getdate() THEN Fertig-Geplant ELSE Fertig-Erreicht END) AS Fertig-Erreicht
FROM tabelle
MSSQL, getdate() heißt vermutlich anders.

Natürlich stellt sich die Sinnfrage. Solange Fertig-Erreicht nicht anderweitig abweichend gesetzt wurde ist es immer entweder NULL oder = Fertig-Geplant. Da du selbst sagst du willst es täglich setzen wird es wohl nie anderweitig eingetragen? Dann kannst du die Spalte auch wegwerfen und im Select erstellen:
Code:
SELECT Fertig-Geplant,(CASE WHEN Fertig-Geplant <= getdate() THEN Fertig-Geplant ELSE NULL END) AS Fertig-Erreicht
FROM tabelle
 
Danke für die raschen Antworten.
Ungewöhnliche Fragestellungen ergeben zwangsweise Fragen nach dem Sinn.
Unsere ausführende Abteilung will das geplante Fertig Datum für die Zukunft setzen.
Ein externes System greift auf unsere DB zu, will dieses Feld aber anders interpretieren - sobald im Fertigdatum-Feld was drin steht, gilt diese Baustelle als Fertiggemeldet. Klingt eigenartig - ist auch so.
Für eine rasche Problemlösung hätte ich den simplen Ansatz, dass ich dem externen System ein neues Feld bereitstelle "Fertigdatum erreicht" und sobald da was drinsteht, gilt für das System diese Baustelle als fertiggemeldet.

Das externe System ist der Dinosaurier SAP - Änderungen, Anpassungen werden hier tunlichst vermieden.

Select liefert die betroffenen Zeilen - wie kann ich mit update das neue Feld befüllen?

fg
Gerold
 
Werbung:
Code:
test=# create table krameger(geplant date, erreicht date);
CREATE TABLE
test=*# insert into krameger (geplant) values (current_date-2);
INSERT 0 1
test=*# insert into krameger (geplant) values (current_date-1);
INSERT 0 1
test=*# insert into krameger (geplant) values (current_date);
INSERT 0 1
test=*# insert into krameger (geplant) values (current_date+1);
INSERT 0 1
test=*# insert into krameger (geplant) values (current_date+2);
INSERT 0 1
test=*# update krameger set erreicht = current_date where erreicht is null and geplant <= current_date;
UPDATE 3
test=*# select * from krameger ;
  geplant  |  erreicht  
------------+------------
 2018-03-03 |
 2018-03-04 |
 2018-02-28 | 2018-03-02
 2018-03-01 | 2018-03-02
 2018-03-02 | 2018-03-02
(5 Zeilen)

test=*#

Und nicht vergessen, SAP bei der nächsten Umstellung auf Sommerzeit runterzufahren ;-)
 
Zurück
Oben