Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Access SQL Summe von Stückliste berechnen und updaten (https://www.delphipraxis.net/211813-access-sql-summe-von-stueckliste-berechnen-und-updaten.html)

HCB 5. Nov 2022 11:09

Datenbank: Access • Version: 2003 • Zugriff über: SQL / Delphi

Access SQL Summe von Stückliste berechnen und updaten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo Entwickler,
ich stehe vor einem neuen Problem: Ich habe eine Stückliste wo die Summe der Felder StckListSumme in eine Artikeltabelle per Update eingetragen werden soll. Mein SQL code funktioniert nicht

UPDATE sArtikel INNER JOIN StckList
ON sArtikel.ArtNr = StckList.StckListNr
SET sArtikel.ArtVKPreis_0 = sum(StckList.StckListSumme)

Problem scheint zu sein, dass der Artikel der aktualisiert werden soll mehrfach in der Stückliste-Tabelle vorkommt.
Es müsste der Betrag 36.04 € herauskommen. Siehe beiliegenden Screenshot.

Bin ratlos. Für Hilfe wäre ich ausgesprochen dankbar.

Liebe Grüße
Harry

mlc42 5. Nov 2022 11:35

AW: Access SQL Summe von Stückliste berechnen und updaten
 
vieleicht so

UPDATE sArtikel SET sArtikel.ArtVKPreis_0 =
(SELECT sum(StckList.StckListSumme) FROM StckList WHERE sArtikel.ArtNr = StckList.StckListNr)

ob Access das kann weiß ich leider nicht.

HCB 5. Nov 2022 11:45

AW: Access SQL Summe von Stückliste berechnen und updaten
 
Hallo mlc42,
danke für deine Hilfe. Leider kommt die Fehlermeldung:

Operation muss eine aktualisierbare Abfrage verwenden!

LG Harry

mlc42 5. Nov 2022 12:40

AW: Access SQL Summe von Stückliste berechnen und updaten
 
habs mal gegoogelt. Access scheint SubSelects im Update nicht zu können.

HCB 10. Nov 2022 17:10

AW: Access SQL Summe von Stückliste berechnen und updaten
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo, hat denn niemand eine Idee? Bin am verzweifeln!

Bin zwar schon etwas weiter aber ich versuche mich gerade in Artikel-Stücklisten einzuarbeiten. Es sollen die Summen der Unterartikel(Stückliste) in den VKPreis des Hauptartikels eingetragen werden. Beispiel: Haupartikel 1044150 besteht aus 5 Unterartikel ( 2x 1044010, 2x 1044140,2x ,1044240,2x 1044270).

Mit folgendem SQL habe ich die Hauptartikel ermittelt:

SELECT distinct ArtNr FROM sArtikel t1 WHERE EXISTS( SELECT 1 FROM StckList t2 WHERE t1.ArtNr = t2.StckListNr);

Jetzt habe ich korrekt die dazugehörigen Unterartiekl mit den gesamtpreis des einzelenen unterartikels ermittelt.

SELECT StckListNr,StckListArtNr,ArtVKPreis_0,StckListMeng e,ArtVKPreis_0*StckListMenge as gesamt FROM sArtikel, stckList
where StckListArtNr = ArtNr;

Problem wo ich jetzt nicht mehr weiter komme ist, wie bekomme ich an die Summe der einzelnen Artikel die dem Hauptartikel zugeordnet sind?
Siehe Screenshot. Es müssten alle Preise im Feld "gesamt" die z.B. dem Hauptartikel 1044150 zugeordnet sind summiert werden und unter ArtVKPreis_0 des Hauptartikels eingetragen werden.
Kurzum, die Summe der Einzelartikel ergibt den VK des Hauptartikels.

Mir gelingt es nicht, eine Updateanweisung zu schreiben wo nur der Preis des Hauptartikels aktualisiert wird.
Ich hoffe, mit beiliegenden Screenshot wird das deutlicher.

Für jede Hilfestellung wäre ich außerordentlich dankbar.

Liebe Grüße
Harry

juergen 10. Nov 2022 22:51

AW: Access SQL Summe von Stückliste berechnen und updaten
 
So wie ich das lese, unterstützt MS Access Subselect?
Quelle MS

Funktioniert das evtl. mit dem Schlüsselwort All, Any oder Some?
Delphi-Quellcode:
UPDATE sArtikel SET sArtikel.ArtVKPreis_0 =
ALL (SELECT sum(StckList.StckListSumme) FROM StckList WHERE sArtikel.ArtNr = StckList.StckListNr)

himitsu 11. Nov 2022 01:08

AW: Access SQL Summe von Stückliste berechnen und updaten
 
ALL und ANY sind doch nur für den Vergleich, aber das hier ist eine Zuweisung,

außerdem liefert dieses SubSelect sowieso nur einen Datensatz, womit ANY/ALL eh nutlos wäre.



Ich würde erstmal vermuten, dass hier vielleicht die Tabelle der Fehler ist.
SQL-Code:
UPDATE sArtikel SET ArtVKPreis_0 = ...

statt
SQL-Code:
UPDATE sArtikel SET sArtikel.ArtVKPreis_0 = ...


Falls aber Access unbedingt ein WHERE haben will,
dann
SQL-Code:
WHERE true
bzw.
SQL-Code:
WHERE 1
hinten dran.

und statt "..." natürlich das (SubSelect), z.B. wie in Post #2 bzw. #6




Aber ja, wenn man die Hilfe ganz genau nimmt, dann wird SubSelect bei Assignment (Zuweisung) garnicht unterstützt.
Zitat:

Zum Erstellen einer Unterabfrage können Sie eins der folgenden drei Syntaxformate verwenden:
https://stackoverflow.com/questions/...uery-in-access



WITH wird von Access scheinbar auch nicht unterstütz.

Eine Lösung, welche gehen dürfte:
* SELECT-INTO : also erstmal ALLE Summen in eine TempTabelle speichern
* und dann das UPDATE gegen diese TempTabelle, welche jetzt pro Artikel nur noch je einen Datensatz hat
* zuletzt die TempTable eventuell wieder löschen

Oder ist JOIN mit einem SubSelect möglich?
SQL-Code:
UPDATE sArtikel
INNER JOIN (
  SELECT sum(StckListSumme) AS Summe, StckListNr
  FROM StckList
  GROUP BY StckListNr
) AS temptable
ON sArtikel.ArtNr = temptable.StckListNr
SET sArtikel.ArtVKPreis_0 = temptable.Summe
oder irgendwie so
SQL-Code:
INNER JOIN (
  SELECT sum(StckListSumme), StckListNr
  ...
) AS temptable (Summe, StckListNr)

mikhal 11. Nov 2022 06:00

AW: Access SQL Summe von Stückliste berechnen und updaten
 
Stücklisten können Unterstücklisten (Baugruppen) enthalten. Die müssen natürlich erkennbar sein, weil nicht mehr die gesamte Stückliste der Baugruppe aufgelistet wird. Ich habe hier das Bit-Feld StckLi (?) in Verdacht.

Erweitere also deine Abfrage um die Bedingung
Delphi-Quellcode:
and StckList.StckLi = 0 // oder False, ich nutze Access seit Jahren nicht mehr
.

Grüße
Mikhal

HCB 11. Nov 2022 11:00

AW: Access SQL Summe von Stückliste berechnen und updaten
 
Hallo Leute, vielen Dank für die Hilfestellungen.

Ich habe es jetzt wie von Jürgen angeregt, die Artikelnummern der Hautartikel jetzt in einer TempTabelle gespeichert. Mit dieser Abfrage kommen die richtigen Summen zu den Hauptartikel heraus:

select sum(gesamt) from AATest
inner join TempTbl
on AATest.StckListNr = TempTbl.StckListNr
group by TempTbl.StckListNr;

Es sind nach dem Beispiel (Sreenshot) die 3 richtigen Summen der jeweiligen SubArtikel.
Wie kann ich jetzt diese Preise von der TempTabelle in der HauptArtikel Tabelle sArtikel Feld ArtVKPreis_0 per update speichern?
Brauche noch ein bisserl Unterstützung.

LG Harry

Delphi.Narium 11. Nov 2022 11:18

AW: Access SQL Summe von Stückliste berechnen und updaten
 
Ist da was funktionierendes bei?

How do I perform update query with subquery in Access?


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