tutorials.de Buch-Aktion 02/2012
ERLEDIGT
NEIN
ANTWORTEN
3
ZUGRIFFE
285
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    cugar cugar ist offline Grünschnabel
    Registriert seit
    Feb 2004
    Beiträge
    2
    Benutze: Delphi 2006 prof. + InterBase 7.5

    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:

    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
     

  2. #2
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo Andreas,

    du hast Recht, das du die 3 Datensätze mit gleichem SNV_ID=2 erst gruppieren musst.

    Versuchs mal so:
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    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
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

  3. #3
    cugar cugar ist offline Grünschnabel
    Registriert seit
    Feb 2004
    Beiträge
    2
    Hi, danke für die schnelle Antwort, dachte schon an Unterabfragen
    Habs ausprobiert, 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.

    Bin weiter fleißig am suchen und probieren.
     

  4. #4
    Avatar von Bernd1984
    Bernd1984 Bernd1984 ist offline Kastenbrot
    Registriert seit
    Oct 2004
    Beiträge
    414
    Hallo Andreas,

    ich hab hier MSSQL, kann sein das es bei Interbase nicht mit dem "AS" funktioniert.
    In meinem SQL war 2x ein "AS". Habs mal rausgenommen.

    Probier vorher mal nur den SubSelect:
    Code sql:
    1
    2
    3
    4
    
    SELECT SNV_SNACKHAUPT_ID, 
            SUM(SNV_MENGE) AS DosenTotal
            FROM SNACKVERKAUF
            GROUP BY SNV_SNACKHAUPT_ID
    ob der so funktioniert.
    Und hier nochmal der korrigierte SQL, ggf. musst du den Subselect ersetzten, wenn der SQL oben noch Probelme macht.
    Code sql:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    SELECT  SUM(H.SNH_GELD) AS GeldTotal, 
        SUM(H.SNH_AUSGEZAHLT) AS ProvisionTotal, 
        SUM(V.DosenTotal) AS DosenTotal
    FROM    SNACK_HAUPT H 
    LEFT OUTER JOIN
        (SELECT SNV_SNACKHAUPT_ID, 
            SUM(SNV_MENGE) AS DosenTotal
            FROM SNACKVERKAUF
            GROUP BY SNV_SNACKHAUPT_ID
        ) V 
    ON H.SNH_ID = V.SNV_SNACKHAUPT_ID
     
    Gruss Bernd
    Zitat Zitat von mAu
    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!

Ähnliche Themen

  1. Stored Proceduren und Interbase
    Von marciboy im Forum PHP
    Antworten: 0
    Letzter Beitrag: 14.01.10, 19:44
  2. insert auf Interbase
    Von dontschew im Forum PHP
    Antworten: 2
    Letzter Beitrag: 16.08.07, 10:30
  3. Konvertierung Interbase zu SQL
    Von Nil18 im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 02.02.07, 11:14
  4. CASE-Alternative in Interbase
    Von Supa im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 14.05.06, 17:55
  5. Apacheserver+PHP+Interbase
    Von DokFerien im Forum PHP
    Antworten: 4
    Letzter Beitrag: 14.04.04, 13:23