SQL Update aus derselben Tabelle

winscheil

Aktiver Benutzer
Beiträge
25
Hallo, ich habe folgendes Problem.

Ich habe eine Tabelle die folgendermaßen aufgebaut ist.

Auftrag Rechnung Position Artikel Kosten
NULL 8010445 1 1234 120,00
206404 8010445 2 4567 50,00
206404 8010445 3 8901 300,00
NULL 8009999 1 1234 100,00
206531 8009999 2 7634 20,00
206531 8009999 3 8723 40,00

Es sind Rechnungspositionen, die normal einem Auftrag zugeordnet sind, nur ein Artikel (123) nicht.
Alle Rechnungspositionen der selben Rechnung sind immer dem selben Auftrag zugeordnet.
Bei der Auswertung, z.B. Summenbildung mit Groupierung auf die Aufträge, geht dann dieser Artikel verloren, da hier die Spalte Auftrag nicht gefüllt ist sondern NULL drin steht.

Ich möchte jetzt diese Tabelle updaten und in den Zeilen, bei denen dieser Artikel (123) auftaucht und das Feld Auftrag leer ist, den Eintrag aus dem Feld Auftrag aus einer anderen dazugehörigen Rechnungsposition nehmen und eintragen.

Mit genau einer Rechnung kann ich es:

update TABELLE
set AUFTRAG = (select Top 1 AUFTRAG from ANP_FT_KALK_LIEFRECH_MA where RECHNUNG = '8010445' and AUFTRAG is not null)
where AUFTRAG IS NULL and RECHNUNG = '8010445'


Aber ich schaffe es nicht auf die ganze Tabelle anzuwenden.
Wenn ich die Einschränkung (where) auf genau eine Rechnung entferne steht immer die selbe Auftragsnummer in den gefüllten Feldern.
Kann mir hier jemand helfen?
 

Anhänge

  • upload_2017-4-5_10-23-49.png
    upload_2017-4-5_10-23-49.png
    8,1 KB · Aufrufe: 2
Werbung:
Code:
test=# select * from winschell ;
 auftrag | rechnung | pos | artikel | betrag
---------+----------+-----+---------+--------
  |  8010445 |  1 |  1234 | 120.00
  206404 |  8010445 |  2 |  4567 |  50.00
  206404 |  8010445 |  3 |  8901 | 300.00
  |  8009999 |  1 |  1234 | 100.00
  206531 |  8009999 |  2 |  7634 |  20.00
  206531 |  8009999 |  3 |  8723 |  40.00
(6 rows)

test=# update winschell set auftrag = x.auftrag from (select rechnung, auftrag from winschell where auftrag is not null) x where winschell.auftrag is null and winschell.rechnung = x.rechnung;
UPDATE 2
test=# select * from winschell ;
 auftrag | rechnung | pos | artikel | betrag
---------+----------+-----+---------+--------
  206404 |  8010445 |  2 |  4567 |  50.00
  206404 |  8010445 |  3 |  8901 | 300.00
  206531 |  8009999 |  2 |  7634 |  20.00
  206531 |  8009999 |  3 |  8723 |  40.00
  206404 |  8010445 |  1 |  1234 | 120.00
  206531 |  8009999 |  1 |  1234 | 100.00
(6 rows)
 
Zurück
Oben