AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Wie Update mit max() pro Gruppe
Thema durchsuchen
Ansicht
Themen-Optionen

Wie Update mit max() pro Gruppe

Ein Thema von BlueStarHH · begonnen am 28. Okt 2017 · letzter Beitrag vom 29. Okt 2017
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
860 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 08:00
Sorry, es war gestern wohl schon zu spät für mich und ich habe einen Teil der Anforderungen verschluckt:

Es soll die nächste "freie" PositionsNr je RechnungNr anstelle der 999 eingetragen werden. Man sieht es an der Beispieltabelle, die ich in der Frage gepostet habe.
  Mit Zitat antworten Zitat
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#2

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 09:22
UPDATE RechnungPos
SET PositionsNr = (SELECT max(PositionNr)+1 FROM RechnungPos p WHERE PositionNr <> 999 and p.rechnungsnummer=rechnungspos.rechnungsnummer)
WHERE PositionsNr = 999
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#3

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 09:52
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.

Mir fällt momentan keine Lösungsmöglichkeit mit einem einzigen Updatestatement ein. Da muss man wohl mit 'nem Cursor über alle Sätze mit PositionsNr = 999 ran und die einzeln ändern.

Ohne einen eindeutigen Schlüssel für jeden Datensatz, kann man (glaub' ich) die Entstehung von Dubletten nicht vermeiden, sofern die Kombination aus RechnungsNr und PositionsNr = 999 nicht eindeutig ist.
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#4

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 10:12
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..
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
860 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 10:26
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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#6

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 14:34
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)
Gruß, Jo
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
860 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 15:04
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.

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.
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
860 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Wie Update mit max() pro Gruppe

  Alt 29. Okt 2017, 10:23
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!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:19 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz