Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SUM aus zwei Tablellen (https://www.delphipraxis.net/184814-sum-aus-zwei-tablellen.html)

Captnemo 23. Apr 2015 12:06

Datenbank: MySQL • Version: 5.1 • Zugriff über: SQLDirect

SUM aus zwei Tablellen
 
Hi,

ich brauch von euch mal fix ein kleine Hilfe.

Ich muss eine Summenbildung nebst Sortierung über 2 Tabellen abfragen.

Beiden Tabellen enthalten Teilweise gleiche Felder, und auch nur die sollen abgefragt werden.

Beispiel:
Code:
Tabelle1:
  Felder: Name
          Vorname
          Netto
          Lieferscheinnummer
          Rechnungsnummer

Tabelle 2:
  Felder: Firma
          Kundennummer
          Name
          Vorname
          Kosten
          Lieferkosten
          Dauer
Wie gesagt, nur ein Beispiel. Ich will jetzt beide Tabelle in einer Abfrage zusammenfassen und
Code:
SUM(Netto / Kosten)
(Also von der Tabelle1 das Feld Netto und von der Tabelle2 das Feld Kosten) mittels
Code:
Group by Name, Vorname
und ein
Code:
Order by Name, Vorname
fertig aufbereitete Daten erhalten. Die anderen Felder der beiden Tabellen werden nicht benötigt, und brauchen auch nicht berücksichtigt werden.

Ich denke schon, dass das geht. Nur weiß ich nicht wie.

Und leider habe ich nur bis 13:00 Uhr zeit, da der Kunde die Daten bis dahin benötigt.

Kann mir jemand ein kleines Beispiel dafür nennen?

DeddyH 23. Apr 2015 12:08

AW: SUM aus zwei Tablellen
 
Aus der Hüfte: eine UNION beider Tabellen als Subselect bilden und davon dann die Summe errechnen.

Captnemo 23. Apr 2015 12:11

AW: SUM aus zwei Tablellen
 
Zitat:

Zitat von DeddyH (Beitrag 1298907)
Aus der Hüfte: eine UNION beider Tabellen als Subselect bilden und davon dann die Summe errechnen.

Mir ist noch aufgefallen, dass die Felder, die die Summe bilden sollen, in beiden Tabellen leider nicht gleich heißen. Geht das trotzdem?

mkinzler 23. Apr 2015 12:14

AW: SUM aus zwei Tablellen
 
Du musst nur dafür sorgen, dass sie gleich heissen ( Alias)

Captnemo 23. Apr 2015 12:20

AW: SUM aus zwei Tablellen
 
Wenn ich das z.B. so mache:
Code:
SELECT Datum, lieferant, lieferantname, Netto as Gewicht, Artikelname as Artikel FROM gm.mobilwiegedaten
where year(datum)=2015 and month(Datum)=3 
union all
Select Datum, lieferant, lieferantname, gewicht, artikel from gm.wiegungen
where year(datum)=2015 and month(Datum)=3 
order by lieferant;
Dann kriege ich nur die Zeilen des zweiten Select's. (Feldnamen sind jetzt andere, als oben).

mkinzler 23. Apr 2015 12:27

AW: SUM aus zwei Tablellen
 
Sind die Typen gleich?

Entferne mal das Union und führe nur den ersten Teil der Abfrage ( mit Aliasen) aus. liefert der das gewünschte (Teil-)Ergebnis?

Captnemo 23. Apr 2015 12:38

AW: SUM aus zwei Tablellen
 
Alles klar. Funktioniert. Vielen Dank.

Captnemo 23. Apr 2015 12:41

AW: SUM aus zwei Tablellen
 
Aber wie könnte ich jetzt in der Ergebnistabelle die Summenbildung machen? Wenn ich's in den einzelnen Select's mache, nützt es mir ja nichts.

mkinzler 23. Apr 2015 12:43

AW: SUM aus zwei Tablellen
 
Mit einer derived Table

Zitat:

Zitat von SQL
select ... from ( <Union>);


hstreicher 23. Apr 2015 12:49

AW: SUM aus zwei Tablellen
 
sum(netto/kosten) ergibt für mich keinen Sinn

das sollte wohl sum(netto)/sum(kosten) heissen
und dann einfach

select t3.Name,t3.Vorname,(select sum(t1.netto) from tabelle1 as t1 where ??)/(select sum(t2.kosten) from tabelle2 as t2 where ??)) from Tabelle1 as t3 Group by 1,2 order by 1,2

die ?? müssen angepasst werden , z.b where t1.vorname=t3.vorname and t1.name=t3.name je nach Tabellenstruktur

quaero 23. Apr 2015 13:02

AW: SUM aus zwei Tablellen
 
Ich denke, bei SUM(netto/kosten) ist die Summe aus netto von Tabelle1 und kosten von tabelle2 gemeint. Also

Zitat:

Zitat von SQL
SELECT name, vorname, SUM(sumspalte)
FROM (
SELECT name, vorname, netto AS sumspalte FROM Tabelle1
UNION
SELECT name, vorname, kosten AS sumspalte FROM Tabelle2
)
GROUP BY name, vorname
ORDER BY name, vorname


DeddyH 23. Apr 2015 13:10

AW: SUM aus zwei Tablellen
 
Vorsichtshalber würde ich die Tabellen aber mit UNION ALL zusammenmischen, um das Ergebnis nicht zu verfälschen.

Captnemo 23. Apr 2015 13:38

AW: SUM aus zwei Tablellen
 
Zitat:

Zitat von quaero (Beitrag 1298928)
Ich denke, bei SUM(netto/kosten) ist die Summe aus netto von Tabelle1 und kosten von tabelle2 gemeint.

Genauso war's auch gemeint. Ist ja eh ein Beispiel gewesen.

Okay, soweit funktioniert es auch super. Vielen Dank ihr habt mir sehr geholfen, und ich konnte meinen Kunden doch noch zufriedenstellen.

Warum ist das mit UNION und UNION ALL überhaupt so? Der Sinn dahinter ist mir noch nicht ganz klar geworden.

mkinzler 23. Apr 2015 13:44

AW: SUM aus zwei Tablellen
 
Union ist DISTINCT über alle Teile

DeddyH 23. Apr 2015 13:46

AW: SUM aus zwei Tablellen
 
Vermutlich hat sich jemand gedacht, dass man eben entscheiden können soll, ob doppelte Datensätze gelistet werden sollen oder nicht. Und der Normalfall wurde dann eben als "nicht listen" festgelegt, weil in den meisten Fällen sinnvoll. Das ist aber komplett spekuliert, vielleicht gibt es auch eher technische Gründe dafür.

quaero 23. Apr 2015 14:57

AW: SUM aus zwei Tablellen
 
Zitat:

Zitat von DeddyH (Beitrag 1298930)
Vorsichtshalber würde ich die Tabellen aber mit UNION ALL zusammenmischen, um das Ergebnis nicht zu verfälschen.

Vollkommen richtig. Irgendwie vergesse ich das jedes Mal.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:58 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 by Thomas Breitkreuz