Delphi-PRAXiS
Seite 2 von 2     12   

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 27. Mai 2021 07:10

AW: MSAccess SQL Update Statement verkürzen?
 
Hallo Detlef,
weil in der Artikeltabelle der mittlere/niedrigste EKPreis für den Artikel gespeichert wird um dann die Preisberechnungen für die VK's machen zu können.

DeddyH 27. Mai 2021 07:14

AW: MSAccess SQL Update Statement verkürzen?
 
Im Sinne der Normalisierung gilt aber eigentlich der Grundsatz, dass Daten, die sich aus anderen Daten berechnen/ermitteln lassen, nicht redundant abgespeichert werden, um mögliche Anomalien zu vermeiden. Wenn die Performance sehr darunter leidet, kann man in Ausnahmefällen davon abweichen, muss dann aber auch sicherstellen, dass die Daten immer konsistent sind.

Jumpy 27. Mai 2021 08:37

AW: MSAccess SQL Update Statement verkürzen?
 
Zitat:

Zitat von HCB (Beitrag 1490215)
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

AUf die Gefahr, dass das mit Access wieder nicht geht und ohne die genauen Feldnamen zu kennen, als Subselect:

SQL-Code:
Update Artikel A
Set A.EKPREIS=
(SELECT Min(ArtLiefEKPreis) From ArtLief Where ArtLiefArtNr=A.ArtNr)
Du hast dann auch die Möglichkeit, je nach DB, das MIN z.B. durch AVG zu ersetzen für den Durschnittspreis o.ä.

HCB 27. Mai 2021 09:16

AW: MSAccess SQL Update Statement verkürzen?
 
@jumpy
Danke für Deine Unterstützung! Die Feldnamen stimmen so.

Update Artikel A
Set A.EKPREIS=
(SELECT Min(ArtLiefEKPreis) From ArtLief Where ArtLiefArtNr=A.ArtNr)

Leider wirft es mir beim Ausführen folgenden Fehler raus:
Statement #1:
Operation muss eine aktualisierbare Abfrage verwenden.

Ich bin neu auf dem SQL Sektor, bin deshalb etwas überfordert.

LG Harry

HCB 27. Mai 2021 13:28

AW: MSAccess SQL Update Statement verkürzen?
 
Ok an alle, so hab ich das gelöst (wenn mal jemand das geleiche Problem hat):

//temp Tabelle erstellen
CREATE TABLE AATest (
ArtNr TEXT(22) NOT NULL,
EKMin currency
);
//mit der Abfrage die temp Tabelle füllen
INSERT INTO AATest (ArtNr, EKMin)
SELECT ArtLiefArtNr, Min(ArtLiefEKPreis) From ArtLief
Group By ArtLiefArtNr;
// Das Update durchführen
UPDATE sArtikel
INNER JOIN AATest ON sArtikel.ArtNr = AATest.ArtNr
SET sArtikel.ArtEKQuer = AATest.EKMin;
// Temp Tabelle wieder löschen
Drop Table AATest;

Danke für Eure Hilfestellung.

LG Harry


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:53 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