Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   MSAccess SQL Update Statement verkürzen? (https://www.delphipraxis.net/207987-msaccess-sql-update-statement-verkuerzen.html)

HCB 25. Mai 2021 12:00

Datenbank: Access • Version: 2003 • Zugriff über: FireDac

MSAccess SQL Update Statement verkürzen?
 
Hallo, ich habe folgendes SQL-Statement zur Preisaktualisierung:

UPDATE sARTIKEL As A INNER JOIN ArtLief AS U
On A.ArtNR = U.ArtLiefArtNr
SET A.ArtZeit_0 = U.ArtLiefEkPreis,
where A.ArtZusinfo4 = U.ArtLiefLiefNr
and U.ArtLiefLiefNr = 'K000103';

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.620)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 between 0.01 and 5.00;

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.393)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 between 5.01 and 10.00;

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.336)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 between 10.01 and 30.00;

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.312)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 between 30.01 and 100.00;

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.295)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 between 100.01 and 500.00;

update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 1.252)/ 0.85,2)
where ArtZusinfo4 = 'K000103' and ArtZeit_0 >500.00;

Wobei ArtZeit_0 dem EKPreis entspricht und ArtVKPreis_0 dem neuen VK-Preis.
Ich frage mich ob man das nicht einfacher und kürzer lösen kann.
Am besten wäre so in der Richtung: EK Spanne von [0.00 bis 1000.00] setze den Multiplikator von [2.00 bis 1.05]
also wäre das bei einem EK von 500 EUR der VK 737,50 (Multiplikator 1.475)

Ich habe an so etwas wie array gedacht, Access scheint aber nicht damit umgehen zu können.
Hat jemand vielleich eine Idee wie man das besser lösen kann, also dynamisch ausgehend vom EK den Multiplikator für VK setzen??

LG Harry

mkinzler 25. Mai 2021 12:12

AW: MSAccess SQL Update Statement verkürzen?
 
SQL-Parameter sollten helfen.

Jumpy 25. Mai 2021 12:17

AW: MSAccess SQL Update Statement verkürzen?
 
Mit einem "Case When" für den Multiplikator, wenn Access das kann?

SQL-Code:
update sArtikel set ArtVkPreis_0 = Round((ArtZeit_0 * 
  Case when ArtZeit_0 between 0.01 and 5.00 then 1.620
       when ArtZeit_0 between 5.01 and 10.00 then 1.39
       ...
       else 1.252     
  end)/ 0.85,2)
where ArtZusinfo4 = 'K000103'

markus888 25. Mai 2021 14:37

AW: MSAccess SQL Update Statement verkürzen?
 
Die Switch Funktion wäre eine Möglichkeit.

https://support.microsoft.com/de-de/...3-f47504f9e379

HCB 25. Mai 2021 15:01

AW: MSAccess SQL Update Statement verkürzen?
 
@jumpy
Gute Idee, danke. Funktioniert aber unter Access nicht, was mich aber auf die Funktion switch gebracht hat.

@marcus
Ja, danke mit switch kann ich den code etwas reduzieren :)

Vielleicht hat noch jemand eine Idee wie man folgendes umsetzt:

EK Spanne von [0.00 bis 1000.00] setze den Multiplikator von [2.00 bis 1.05]
also wäre das bei einem EK von 500 EUR der VK 737,50 (Multiplikator 1.475) Je höher der EK desto niedriger der Preisaufschlag.

Wie kann man da eine Automatik per SQL code einbauen???

LG Harry

Delphi.Narium 25. Mai 2021 15:23

AW: MSAccess SQL Update Statement verkürzen?
 
Zeig' doch bitte mal Dein derzeitiges Statement (wenn's mehrere sind, dann eben mehrere).

Ohne ist es eher schwierig festzustellen, was geändert werden könnte / müsste, um Deinen Wünschen zu entsprechen.

jobo 25. Mai 2021 17:54

AW: MSAccess SQL Update Statement verkürzen?
 
Also am einfachsten wäre, Deine Faktoren ergeben eine Formel. Dann ist es nur ein Statement.

Datenbank Style, halbwegs elegant und stark adaptierbar (Rabatt, Saison, ..) wäre ganz schlicht eine zusätzliche Tabelle die Preisspannen und Faktor aufführt. Dann ist es auch wieder nur ein Update Statement. Ggf. muss man hier beachten, dass es auch nach Änderungen später langfristig nachvollziehbar bleibt (Also nur inserts mit Zeiger für aktive Elemente, Gültigkeitsdauer usw., wenn man das auf die Spitze treibt kann man redaktionell für beliebige Zeiträume Preisanpassungen vornehmen, während man selbst auf den Bahamas Drinks schlürft. Wenn man alles richtig eingestellt hat, gibt's auch daheim keine böse Überraschung)

HCB 26. Mai 2021 17:04

AW: MSAccess SQL Update Statement verkürzen?
 
@jobo
Danke für Deinen Vorschlag mit der zusätzlichen Tabelle. In der Richtung habe ich noch gar nicht gedacht.
Die Idee mit den Bahamas gefällt mir natürlich außerordentlich gut :drunken:

LG Harry

HCB 26. Mai 2021 19:27

AW: MSAccess SQL Update Statement verkürzen?
 
EINE Frage hätte ich noch:
Ich möchte aus einer Lieferanten Tabelle den günstigsten EK Preis für einen Artikel auswählen und diesen als EKPreis in der Artikel Tabelle speichern, also updaten.
Den günstigen Lieferantenpreis auszuwählen hab ich schon:

SELECT Min(A.ArtLiefEKPreis) As Preis
From ArtLief As A
Group By A.ArtLiefArtNr;

Wie aber kann ich aber ein Update des EKpreis der Artikeltabelle machen? Funktioniert das mit join und Access?
Hat jemand einen Lösungsvorschlag? Das wäre toll.

LG Harry

DeddyH 26. Mai 2021 20:16

AW: MSAccess SQL Update Statement verkürzen?
 
Du hast eine Artikeltabelle, eine Lieferantentabelle und eine Zuordnungstabelle zwischen Artikeln und Lieferanten, habe ich das richtig verstanden? Wozu dann den Preis noch redundant in der Artikeltabelle speichern?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 Uhr.
Seite 1 von 2  1 2      

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