Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Wie Update mit max() pro Gruppe (https://www.delphipraxis.net/194211-wie-update-mit-max-pro-gruppe.html)

HolgerX 29. Okt 2017 10:12

AW: Wie Update mit max() pro Gruppe
 
Hmm..

Mal eine andere Frage:
Könnten Positionen mit der Nummer 999 nicht stornierte, somit ungültige Rechnungs-Positionen sein?

Deshalb stellt sich hier eher die Frage, ob diese überhaupt gelistet werden oder sowieso keine 'echte' Positionsnummer haben, da storniert.

Ansonsten müsstest Du eine temporäre Tabelle per z.B. Select insert anlegen, dort per die Position anfügen und immer die PosNr neu anhand der letzten Pos aus der Temptable vergeben.

Da diese Temptable immer die höchste PosNr enthält, würde auch der Insert immer die richtige nächste PosNr verwenden.

Zum Schluss würde diese TempTable als Record zurück gegeben werden oder dann als Datenquelle für den Update dienen.

Hab leider kein Beispiel zur Hand.. ;)

BlueStarHH 29. Okt 2017 10:23

AW: Wie Update mit max() pro Gruppe
 
Zitat:

Zitat von nahpets (Beitrag 1384448)
Das geht aber schief, wenn es mehr als eine PositionsNr = 999 zu einer RechnungsNr gibt, die bekommen dann alle die Max(PositionNr)+1. Man erhält dann Dubletten, die ggfls. nicht mehr so leicht zu erkennen sind, wie die 999.

In den Daten hier gibt es die 999 maximal ein mal je RechnungsNr. Insofern lößt der Code von TigerLilly aus Post #9 mein Problem. Danke an alle!

BlueStarHH 29. Okt 2017 10:26

AW: Wie Update mit max() pro Gruppe
 
Zitat:

Zitat von HolgerX (Beitrag 1384450)
Könnten Positionen mit der Nummer 999 nicht stornierte, somit ungültige Rechnungs-Positionen sein?

In den Daten, die ich hier bekommen habe, sind mit 999 Positionen markiert, die immer am Ende stehen sollen. In diesem Fall hat das also nicht mit einem Ungültig-Flag zu tun.

jobo 29. Okt 2017 14:34

AW: Wie Update mit max() pro Gruppe
 
Ist die 999 wirklich immer am Ende der Rechnungspositionsliste?
Und wenn ja und es geht bloß um Sortierung, warum soll sie dann geändert werden, die Sortierung ändert sich dadurch nicht. (außer es sind mehr als 999 Artikel)

BlueStarHH 29. Okt 2017 15:04

AW: Wie Update mit max() pro Gruppe
 
Zitat:

Zitat von jobo (Beitrag 1384464)
Ist die 999 wirklich immer am Ende der Rechnungspositionsliste?

Die 999 gibt an, dass diese Position ans Ende der Liste bei der Ausgabe soll. Wie das intern in der DB sortiert ist, kann man nicht vorhersagen.

Zitat:

Zitat von jobo (Beitrag 1384464)
Und wenn ja und es geht bloß um Sortierung, warum soll sie dann geändert werden, die Sortierung ändert sich dadurch nicht. (außer es sind mehr als 999 Artikel)

Auf der gedrucken Rechnung werden auch die PositionsNr gedruckt. Dort soll keine 999 zu sehen sein sondern stattdessen die nächste freie Nummer. Auf dem Ausdruck ist nach der PositionsNr sortiert.

mkinzler 29. Okt 2017 16:52

AW: Wie Update mit max() pro Gruppe
 
Oder bei der Abfrage

SQL-Code:
select
  <Felder ohne PosNr>,
  iif( PositionNr < 999; PositionNr; SELECT MAX(PositionNr) FROM RechnungPos ps WHERE ps. RechNr = p.RechNr       ps.PositionNr < 999) +1 ) as PositionNr
from
  RechnungPos p
where
  <Bedingung>;


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:16 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz