-
SQL Summen aus mehreren Tabellen mit unterschiedlicher Satzanzahl
Ich möchte aus 2 verschiedenen Dateien jeweils Summen bekommen, unabhängig wieviele Sätze mit gleichem Schlüssel in den jeweiligen Dateien stehen
Tabelle1:
Nummer, Position, Sollkosten
Tabelle2:
Nummer, Position, Istkosten
Tabelle1 ist immer mind. mit einem Satz gefüllt. Tabelle2 kann 0 bis N Sätze haben.
select tabelle1.nummer, sum(sollkosten), sum(istkosten)
from tabelle1 left join tabelle2 on tabelle1.nummer=tabelle2.nummer
Problem: Wenn in Tabelle1 ein Satz steht und in Tabelle2 zwei Sätze, dann wird die Summe aus Tabelle1 verdoppelt. Wie kann ich das vermeiden?
Danke & Gruß
-
With a as (select nr, pos, sum(istkosten) from tab2 group by nummer)
select tabelle1.nummer, sum(sollkosten), sum(istkosten)
from tabelle1 left join a on tabelle1.nummer=a.nummer
Das Notwendige steht über dem technisch machbaren.
(klingt komisch, funktioniert aber!)
-
Da hättest du eigentlich einen Fehler bekommen müssen, da der Group By einfach fehlt:
select tabelle1.nummer, sum(sollkosten), sum(istkosten)
from tabelle1 left join tabelle2 on tabelle1.nummer=tabelle2.nummer
group by tabelle1.nummer
-
Danke für die Hilfe. Ich hatte tatsächlich das GOUP BY in meinem Beitrag vergessen. Im Original hatte ich es natürlich drin. Die Lösung ist, dass ich die Istkosten vorher in der WITH Anweisung gruppiere. Korrekt lautet das Statement:
With a as (select nr, sum(istkosten) as istkosten
from tabelle2 group by tabelle2.nr)
select tabelle1.nr, sum(sollkosten), sum(istkosten)
from tabelle1 left join a on tabelle1.nr=a.nr
group by tabelle1.nr
DANKE Euch! :-)
-
Das Problem besteht nicht in der obigen Aussage:
"Problem: Wenn in Tabelle1 ein Satz steht und in Tabelle2 zwei Sätze, dann wird die Summe aus Tabelle1 verdoppelt."
Hier kann es keine "Verdoppelung" kommen, da dies ja die Regel ist, wenn ich 1 Kopf und n Positionen habe (1:N-Beziehung).
Dein Problem tritt dann auf, wenn in Tabelle 1 mehr als 1 Satz vorhanden ist. Dann tritt eben die Vervielfältigung ein und erzwingt eben ein getrenntes "Vorverdichten" von Tabelle 1 und 2, was eben einer N:M-Beziehung entspricht.
-
Naja, wenn man zu jeder der n Positionen den Kopf ermittelt, kann man leicht auf n Köpfe kommen...
-
Dann hast du die Tabellen verdreht und eine N:1-Beziehung definiert;-).
Deshalb gibt es ja auch noch den "Right [outer] Join", der das dann wieder gerade biegt.
-
Wenn man per SQL mit einem SELECT zu einem (1) Kopf seine (N) Positionen dazuliest, sollte man in diesem SELECT besser nicht die Beträge dieses Kopfs aufsummieren...
-
Stimmt, da könnte man MIN/MAX verwenden.
Similar Threads
-
By MiMarkow in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 17-03-17, 08:39
-
By Robi in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 01-02-17, 11:46
-
By SabineK in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 24-11-14, 19:18
-
By Malte in forum NEWSboard Programmierung
Antworten: 10
Letzter Beitrag: 17-10-14, 11:13
-
By Starocotes in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 10-11-13, 00:26
Tags for this Thread
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks