1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Abfrageergebnis in eine Zeile bringen

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Andreas1981, 12 August 2010.

  1. Andreas1981

    Andreas1981 Neuer Benutzer

    Hallo!
    Ich habe folgendes Statement:

    SELECT distinct ap.aufnr,
    (CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(STCK) ELSE 0 END) AS NichtVersandt,
    (CASE WHEN ap.info LIKE '%O%' THEN SUM(STCK) ELSE 0 END) AS Versandt,
    SUM (ap.stck) AS Gesamt
    FROM aufkopf ak INNER JOIN aufpos ap
    ON ak.aufnr = ap.aufnr
    WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
    GROUP BY ap.aufnr,ap.info


    Als Ergebnis bekomme ich:

    Aufnr Versandt Nicht Versandt Gesamt
    12345 1 0 1
    12345 2 0 2

    Ergebnis sollte aber sein:

    Aufnr Versandt Nicht Versandt Gesamt
    12345 3 0 3

    Was mache ich falsch, bzw. muss ich tun, damit ich nur eine Zeile pro Aufnr habe.
    Schon mal vielen Dank im Voraus!

    MfG
    Andreas
     
  2. thomas_w

    thomas_w Datenbank-Guru

    AW: Abfrageergebnis in eine Zeile bringen

    Da kann ich nur raten. Um besser zu helfen, möchten wir die ein paar Testdaten plus der Tabellenstrukturen.

    Eine Idee wäre also folgendes..(siehe GROUP BY)

    Code:
    SELECT distinct ap.aufnr,(CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(ap.STCK) 
                               ELSE 0 
                              END) AS NichtVersandt,
                             (CASE WHEN ap.info LIKE '%O%' THEN SUM(ap.STCK) 
                               ELSE 0 
                              END) AS Versandt,
                             SUM (ap.stck) AS Gesamt
      FROM aufkopf ak 
      JOIN aufpos ap
        ON ak.aufnr = ap.aufnr
     WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
     GROUP BY ap.aufnr;
    
    Grüße
    Thomas
     
  3. Andreas1981

    Andreas1981 Neuer Benutzer

    AW: Abfrageergebnis in eine Zeile bringen

    Hallo Thomas,
    danke für Deine antwort. Ich bekomme aber eine Fehlermeldung:
    Die ap.info Spalte ist in der Auswahlliste ungültig, da sie nicht in einer Aggregatfunktion und nicht in der GROUP BY Klasuel enthalten ist.
     
  4. thomas_w

    thomas_w Datenbank-Guru

    AW: Abfrageergebnis in eine Zeile bringen

    Stimmt, da hast Du allerdings recht. Die ap.info muss im GROUP BY verbleiben.

    Kannst Du ein kleines Beispiel zusammen stellen, damit ich das besser Nachvollziehen kann?

    Grüße
    Thomas
     
  5. thomas_w

    thomas_w Datenbank-Guru

    AW: Abfrageergebnis in eine Zeile bringen

    Im Prinzip fällt mir noch was anderes auf. Warum ist der DISTINCT in der Select-Liste?

    Eigentlich erzeugt der GROUP BY doch eine Gruppe über die Spalten "ap.aufnr" und "ap.info". Auf die weiteren Spalten kan per Agggratfunktion zugegriffen werden. Der DISNCT kann weg, würde ich behaupten.

    Code:
    SELECT ap.aufnr,(CASE WHEN ap.info NOT LIKE '%O%' THEN SUM(ap.STCK) 
                               ELSE 0 
                              END) AS NichtVersandt,
                             (CASE WHEN ap.info LIKE '%O%' THEN SUM(ap.STCK) 
                               ELSE 0 
                              END) AS Versandt,
                             SUM (ap.stck) AS Gesamt
      FROM aufkopf ak 
      JOIN aufpos ap
        ON ak.aufnr = ap.aufnr
     WHERE ap.info Like '%S%' AND ak.kaufstatus not like '%f%'
     GROUP BY ap.aufnr, ap.info;
    
    Grüße
    Thomas
     
  6. Charly

    Charly Datenbank-Guru

    AW: Abfrageergebnis in eine Zeile bringen

    Hallo,
    versuch es mal hiermit:

    SELECT aufnr,SUM(NichtVersandt)AS NichtVersand,SUM(Versandt) AS Versand, SUM(Gesamt) AS Gesamt
    FROM (Deine Abfrage)A
    GROUP BY aufnr

    Gruß Charly
     
Die Seite wird geladen...

Diese Seite empfehlen