![]() |
Datenbank: Firebird • Version: 1.5.3.x • Zugriff über: Nativ über UIB Komponenten
SQL Update ... mache ich was falsch?
Hallo,
kann es sein, dass ich an folgendem SQL-Script was falsch mache?
SQL-Code:
Hintergrund:
update GESAMTKOSTEN set ABHOL = (select EINZELKOSTEN.KOSTEN from EINZELKOSTEN where ART=1 and EINZELKOSTEN.AUFTRAGSNUMMER=GESAMTKOSTEN.AUFTRAGSNUMMER);
update GESAMTKOSTEN set ZUSTELL = (select EINZELKOSTEN.KOSTEN from EINZELKOSTEN where ART=2 and EINZELKOSTEN.AUFTRAGSNUMMER=GESAMTKOSTEN.AUFTRAGSNUMMER); update GESAMTKOSTEN set PORTO = (select EINZELKOSTEN.KOSTEN from EINZELKOSTEN where ART=3 and EINZELKOSTEN.AUFTRAGSNUMMER=GESAMTKOSTEN.AUFTRAGSNUMMER); In der EINZELKOSTEN Tabelle sind pro Auftrag mehrere Datensätze. Anhand von "ART" wird unterschieden, was das für Kosten sind. In der GESAMTKOSTEN Tabelle gibt es pro Auftrag einen Datensatz aber für jede ART eine SPALTE. (Die Tabellen / Namen sind erfunden ... aber das Prinzip ist gleich) Einzelkosten hat ca 150.000 Datensätze. Die Gesamtkosten ca 50.000. Wenn ich nun das o.g. Script starte, geht die Prozessorlast auf 75 bis 99% und auch nach 1 Stunde kein Ergebnis. Eigentlich müsste es doch eine einfachere Möglichkeit geben, oder? Kann mir einer einen Tip geben? |
Re: SQL Update ... mache ich was falsch?
Da Gesamtkosten nur eine Zusammenfassung der Einzelkosten darstellt, umfasst sie ja redundaten Daten.
Ich würde das durch eine SP lösen, welche die Daten bei Bedarf bereitstellt als sie in einer Extra Tabelle zu halten. Die Abfrage selber würde ich über die Aggregatsfunktion SUM machen. |
Re: SQL Update ... mache ich was falsch?
Zitat:
|
Re: SQL Update ... mache ich was falsch?
Kann sein, daß ich die Struktur mißverstanden habe, aber ich würde es so machen:
SQL-Code:
select SUM(EINZELKOSTEN.KOSTEN) from EINZELKOSTEN GROUP BY ART and EINZELKOSTEN.AUFTRAGSNUMMER;
|
Re: SQL Update ... mache ich was falsch?
Zitat:
auftragsnummer INTEGER, ABHOL double, ZUSTELL double, PORTO double und hier der Aufbau von Einzel: Primary-Index: LONGINT autoinc auftragsnummer: integer, art: integer kosten:double |
Re: SQL Update ... mache ich was falsch?
Dan würde ich es in dieser Richtung versuchen:
SQL-Code:
select
a.Auftragsnummer, SUM(a.KOSTEN) as abhol, SUM(b.KOSTEN) as zustell, SUM(c.KOSTEN) as porto from EINZELKOSTEN a,EINZELKOSTEN b, EINZELKOSTEN c where a.Art = 1, b.Art = 1, c.Art = 1 GROUP BY AUFTRAGSNUMMER; |
Re: SQL Update ... mache ich was falsch?
Zitat:
|
Re: SQL Update ... mache ich was falsch?
Wie ich geschriebne habe, würde ich kein Update machen, da in der Gesamt-Tabelle das gleich stehen würde wie in der Abfrage.
|
Re: SQL Update ... mache ich was falsch?
wegen Nichtbeachtung gelöscht...
|
Re: SQL Update ... mache ich was falsch?
Zitat:
Zitat:
Auf welchen Werd soll denn deiner Meinung nach in Gesamtkosten.Abhol gesetzt werden... Soll sich die Datenbank da einen aussuchen :gruebel: Du siehst, auf was ich raus bin :-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:36 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