AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Select mit Summe über Tabellen mit Join
Thema durchsuchen
Ansicht
Themen-Optionen

Select mit Summe über Tabellen mit Join

Ein Thema von Dumpfbacke · begonnen am 24. Feb 2020 · letzter Beitrag vom 1. Mär 2020
Antwort Antwort
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
335 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 11:43
Datenbank: Firebird • Version: 2.5 • Zugriff über: UniDac
Hallo Leute,
könnt Ihr mir mal helfen einen Select zu bauen
Ich habe hier zwei Tabellen.

Delphi-Quellcode:
Tabell1:

Zähler Lagerplatz
1, Schrank 1
2, Schrank 2
3, Schrank 3
4, Schrank 4
5, Schrank 5
6, Schrank 6
Delphi-Quellcode:
Tabelle 2:

Artikel, IDSchrank, Preis
Roter Kleber, 1, 15,20
Gelber Kleber, 1, 7,25
Grüner Kleber, 2, 13,14
Rosa Kleber, 4, 14,87
Als Ergebnis möchte ich die Beträge haben je Schrank. Hier ist das Problem ich möchte auch die leeren Schränke haben

Delphi-Quellcode:
Schrank 1, 22,45
Schrank 2, 13,87
Schrank 3, 0,00 -.> oder auch leer Hauptsache es ist der Schrank 3 hier vorhanden
Schrank 4, 14,87
Schrank 5, 0,00 -.> oder auch leer Hauptsache es ist der Schrank 5 hier vorhanden
Schrank 6, 0,00 -.> oder auch leer Hauptsache es ist der Schrank 6 hier vorhanden
Ich habe es im Selecht mit Full Join versucht oder Left Outer usw. es geht nicht. Die Leeren Schränke kommen nicht raus ?

Select Tabelle1.Lagerpaltz, Sum(Tabelle2.Preis)
From Tabelle1
Left Outer Join Tabelle2 on Tabelle1.Zähler = Tabelle2.IDSchrank
Tanja
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 11:49
Left outer join

SQL-Code:
Select
  t1.Lagerplatz,
  t2.Artikel,
  t2.Preis
from
  Tabelle1 t1 left join Tabelle t2 on t2.IDSchrank = t1.ID;
Markus Kinzler
  Mit Zitat antworten Zitat
Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
335 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 11:59
Ich möchte die Summe des Preises haben. mit Sum und Group by gehet es nicht wenn ein Schrank leer ist.
Tanja
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
627 Beiträge
 
Delphi XE6 Enterprise
 
#4

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 12:20
Code:
with summen as
(
  select idschrank, sum(preis) as summe from tabelle2
  group by idschrank
)
select t1.lagerplatz, s.summe from tabelle1 t1 left join summen s
on t1.ZAEHLER = s.idschrank
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.876 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 12:39
Oder
SQL-Code:
Select
  t1.Lagerplatz,
  t2.Artikel,
  sum( coalesce(t2.Preis, 0) as Preis)
from
  Tabelle1 t1 left join Tabelle t2 on t2.IDSchrank = t1.ID
group by
  t1.Lagerplatz, t2.Artikel;
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
717 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 17:13
Oder
SQL-Code:
Select
  t1.Lagerplatz,
  t2.Artikel,
  sum( coalesce(t2.Preis, 0) as Preis)
from
  Tabelle1 t1 left join Tabelle t2 on t2.IDSchrank = t1.ID
group by
  t1.Lagerplatz, t2.Artikel;
Hallo, ich habe keine Ahnung von FireBird. Aber in ADS oder SQLServer mache ich das so:
SQL-Code:
Select
  t1.Lagerplatz,
  t2.Artikel,
  sum( IsNull(t2.Preis, 0) as Preis)
from
  Tabelle1 t1 left join Tabelle t2 on t2.IDSchrank = t1.ID
group by
  t1.Lagerplatz, t2.Artikel;
Änderung ist hier coalesce durch IsNull ersetzt zu haben. Das hat bei ADS und SQLServer zur Folge dass auch dann summiert wird wenn in einem der Datensätze NULL für Preis steht.
-> Wobei ich mich natürlich hüte mit deutschen Feldnamen zu arbeiten.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 12:40
Left Join ist schon richtig, wenn man davon ausgehen muss, dass nicht alle Lagerplätze befüllt sind.

Wichtig ist für die Ausgabe von "Leerwerten" immer, dass sie trotzdem als Datum vorhanden sein müssen. SQL kann keine Daten anzeigen, die nicht da sind. Also muss man in diesem Fall die Lagerplatzdefinition auslesen und mit den Artikeln joinen.

Die With Lösung von Frickler macht das auch, vielleicht sogar schneller, aber ich finde es klassisch schicker und verständlicher

Code:
select lager.zähler, lager.lagerplatz,
       sum(artikel.preis) as summe_preis
  from Tabell1 as lager left join tabelle2 as artikel
    on lager.zähler = artikel.IDSchrank
 group by lager.zähler, lager.lagerplatz
Gruß, Jo
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
302 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Select mit Summe über Tabellen mit Join

  Alt 24. Feb 2020, 14:19
Noch ein Tipp von mir dazu:

Ich sorge beim DB-Entwurf bei solchen Feldern mit einem Default Wert dafür, dass gar keine NULL Werte entstehen.

Da wo das möglich ist, kann man die Probleme schon im Vorfeld minimieren.

Grüße
Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 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