AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Tabelle richtig gruppieren.... nur wie?
Thema durchsuchen
Ansicht
Themen-Optionen

Tabelle richtig gruppieren.... nur wie?

Ein Thema von cugar · begonnen am 11. Sep 2010 · letzter Beitrag vom 11. Sep 2010
Antwort Antwort
cugar

Registriert seit: 6. Jan 2007
149 Beiträge
 
Delphi XE Professional
 
#1

Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 05:52
Datenbank: InterBase • Version: 7.5 • Zugriff über: Delphi 2006 prof.
Hi, stehe gerade auf dem Schlauch

Tabelle "SNACK_HAUPT"
mit Spalten: SNH_ID, SNH_GELD, SNH_AUSGEZAHLT
Inhalt:
SNH_ID=1 SNH_GELD=37 SNH_AUSGEZAHLT=3,7
SNH_ID=2 SNH_GELD=14 SNH_AUSGEZAHLT=1,4

Tabelle "SNACKVERKAUF "
mit Spalten: SNV_ID, SNACKHAUPT_ID, SNV_MENGE
Inhalt:
SNV_ID=1 SNACKHAUPT_ID=1 SNV_MENGE=37
SNV_ID=2 SNACKHAUPT_ID=2 SNV_MENGE=5
SNV_ID=3 SNACKHAUPT_ID=2 SNV_MENGE=8
SNV_ID=4 SNACKHAUPT_ID=2 SNV_MENGE=1

Meine Versuchsanweisung:

SQL-Code:
SELECT
SUM(H.SNH_GELD) as GeldTotal, SUM(H.SNH_AUSGEZAHLT) as ProvisionTotal, SUM(V.SNV_MENGE) as DosenTotal
FROM SNACK_HAUPT H
LEFT JOIN SNACKVERKAUF V ON (H.SNH_ID = V.SNV_SNACKHAUPT_ID)
Sollte sowas als Ergebn. kommen:
GeldTotal =51
ProvisionTotal =5,1
DosenTotal =51

ist aber:
GeldTotal =79
ProvisionTotal =7,9
DosenTotal =51

Mir ist klar wie InterBase auf diese werte kommt, SNACKVERKAUF beinhaltet 3 Datensätze mit gleichem SNV_ID=2. Hab da LEFT Join, weil es durch aus sein kann, das keine Dosen aufgefüllt wurden.
Wie müsste ich das ganze jetzt gruppieren damit das ganze stimmt??



Viele Grüsse
Andreas


Ps. Sowas geht leider nicht.

SQL-Code:
SELECT SUM(H.SNH_GELD) AS GeldTotal,
    SUM(H.SNH_AUSGEZAHLT) AS ProvisionTotal,
    SUM(V.DosenTotal) AS DosenTotal
FROM SNACK_HAUPT AS H
LEFT OUTER JOIN
    (SELECT SNV_SNACKHAUPT_ID,
        SUM(SNV_MENGE) AS DosenTotal
        FROM SNACKVERKAUF
        GROUP BY SNV_SNACKHAUPT_ID
    ) AS V
ON H.SNH_ID = V.SNV_SNACKHAUPT_ID
Interbase gibt eine Fehlermeldung aus, zuerst bei: "FROM SNACK_HAUPT AS H" muss "AS" weg und danach kommt die nächste mit Token unknow Select, in der Zeile hinter "LEFT OUTER JOIN". Glaub diese Unterabfragen gehen hier nur in "where" Anweisung.

Geändert von mkinzler (11. Sep 2010 um 09:56 Uhr) Grund: SQL-Tags eingefügt
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 10:00
Interbase 7.5 scheint keine DERIVED TABLES zu kennen
Versuche diese mal durch einen VIEW oder SP zu ersetzen
Markus Kinzler
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#3

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 11:18
SQL-Code:
SELECT SUM(SNH_GELD) AS GeldTotal,
       SUM(SNH_AUSGEZAHLT) AS ProvisionTotal,
       (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF) AS DosenTotal
FROM SNACK_HAUPT H
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#4

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 12:32
SQL-Code:
SELECT SUM(SNH_GELD) AS GeldTotal,
       SUM(SNH_AUSGEZAHLT) AS ProvisionTotal,
       (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF) AS DosenTotal
FROM SNACK_HAUPT H
Da fehlt noch 'ne Where-Bedingung in der Unterabfrage
SQL-Code:
SELECT SUM(SNH_GELD) AS GeldTotal,
       SUM(SNH_AUSGEZAHLT) AS ProvisionTotal,
       (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF WHERE SNACKVERKAUF.SNV_ID=SNACK_HAUPT.SNH_ID) AS DosenTotal
FROM SNACK_HAUPT
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#5

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 17:08
@sx2008: Deine Anweisung kann überhaupt nicht ausgeführt werden. Da würde ich nochmal drüber nachdenken. Außerdem ergibt die vorgegebene Abfrage genau eine Zeile. Warum sollte man dann noch differenzieren?

Deine Abfrage müsste wenn dann so aussehen...
SQL-Code:
SELECT SNH_ID,
       SUM(SNH_GELD) AS GeldTotal,
       SUM(SNH_AUSGEZAHLT) AS ProvisionTotal,
       (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF
        WHERE SNV_ID = SNACK_HAUPT.SNH_ID) AS DosenTotal
FROM SNACK_HAUPT
GROUP BY SNH_ID
  Mit Zitat antworten Zitat
cugar

Registriert seit: 6. Jan 2007
149 Beiträge
 
Delphi XE Professional
 
#6

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 19:18
Hi,
SQL-Code:
SELECT SNH_ID, SUM(SNH_GELD) AS GeldTotal, SUM(SNH_AUSGEZAHLT) AS ProvisionTotal, (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF
        WHERE SNV_ID = SNACK_HAUPT.SNH_ID) AS DosenTotal
FROM SNACK_HAUPT
GROUP BY SNH_ID
Sieht gut aus, das Problem ist aber von der Tabelle SnackVerkauf nimmt er nur den ersten Datensatz.
Hab mit folgenden Werten gefüllt:

Inhalt:
SNH_ID=1 SNH_GELD=9 SNH_AUSGEZAHLT=0,9


Tabelle "SNACKVERKAUF "
Inhalt:
SNV_ID=1 SNACKHAUPT_ID=1 SNV_MENGE=2
SNV_ID=2 SNACKHAUPT_ID=1 SNV_MENGE=3
SNV_ID=3 SNACKHAUPT_ID=1 SNV_MENGE=4

Müsste sein: Geld=9 ausgezahlt=0,9 Menge=9
Ist aber: Geld=9 ausgezahlt=0,9 Menge=2

Er scheint die Funktion "Sum" im 2 select nicht zu beachten^^


Habs:
Kleiner Fehler hat sich da eingeschliechen, die Anweisung müsste lauten:

SQL-Code:
SELECT SNH_ID, SUM(SNH_GELD) AS GeldTotal, SUM(SNH_AUSGEZAHLT) AS ProvisionTotal, (SELECT SUM(SNV_MENGE)
        FROM SNACKVERKAUF
        WHERE SNV_SNACKHAUPT_ID = SNACK_HAUPT.SNH_ID) AS DosenTotal
FROM SNACK_HAUPT
GROUP BY SNH_ID
Zeile:
Richtig: WHERE SNV_SNACKHAUPT_ID = SNACK_HAUPT.SNH_ID) AS DosenTotal Falsch: WHERE SNV_ID=SNACK_HAUPT.SNH_ID) AS DosenTotal Supppper alles richtig!

Wozu es gut ist?
Die Tabelle Snackhaupt zeigt mir alle Snacklieferungen die statt gefunden haben.
Diese Anweisung hier oben zeigt mir nur in meiner DBXGrid, unten, die Summen der Werte die ich wissen möchte. Es gibt also für die Grid 2 Sql_Anweisungen gleichzeitig, die ausgeführt werden.

Danke für die Hilfe!!!!
Eine unschöne Lösung (unnötiger Speicherplatzverlust) wäre, eine Spalte in Snackhaupt zu erstellen und da die Gesamtmenge noch ein Mal extra für diese Berechnung zu speichern. Jetzt konnte ich als blutiger Anfänger wieder was lernen.

Schönen Abend noch

Geändert von mkinzler (11. Sep 2010 um 20:12 Uhr) Grund: SQL-Tags eingefügt
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#7

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 19:28
Würdest du mal bitte meinen ersten Vorschlag ausprobieren. Der zweite ergibt sowieso nicht das was du haben möchtest, da ging es nur um sx2008.
  Mit Zitat antworten Zitat
cugar

Registriert seit: 6. Jan 2007
149 Beiträge
 
Delphi XE Professional
 
#8

AW: Tabelle richtig gruppieren.... nur wie?

  Alt 11. Sep 2010, 19:46
Habs gerade gemerkt, nach dem ich 2 Datensatz in der Snackhaupt engegeben habe, hat er zwar Geld und Provision richtig gerechent. die Menge aber nicht. Da hat er nur die Menge der Dosen des ersten Datensatzes gerechnet.
Der erste Vorschlag ist richtig.
Gut aufgepasst^^

Der Server gibt nicht auf...
Dies Abfrage funktioniert gut solange man die daten nicht filtert. Da in der 2 Select die Tab. Snackverkauf nicht durch where mit Snackhaupt verbunden ist, zeigt sie immer die Gesamtzahl aller dosen in der Tabelle. Setzt man am ende zb "where SNH_ID =1" ändern sich GeldTotal und Provision, die Menge der Dosen bleibt gleich.

SELECT SUM(SNH_GELD) AS GeldTotal,
SUM(SNH_AUSGEZAHLT) AS ProvisionTotal,
(SELECT SUM(SNV_MENGE)
FROM SNACKVERKAUF) AS DosenTotal
FROM SNACK_HAUPT H

Verbindet man die beiden tabellen mit WHERE, stimme die Anzahl der dosen nicht mehr, zeigt nur die Anzahl der Dosen die zu einem Datensatz der Snackhaupt gehören. ich muss noch viel lernen...

Geändert von cugar (11. Sep 2010 um 20:15 Uhr)
  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 23:29 Uhr.
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