Announcement

Collapse
No announcement yet.

Ergebnis mehrerer Abfragen zusammenfassen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Ergebnis mehrerer Abfragen zusammenfassen

    Hallo,

    wenn ich das Ergebnis aus 2 Abfragen gem. folgendem Beispiel zusammenfasse, funktioniert das wunderbar. Sobald ich die Abfrage von 2 auf
    3 Spalten erweitern will, bekomme ich immer eine Fehlermeldung.
    Ich habe zur Vereinfachung, die 3.te Spalte gleich wie die 2.te gemacht.
    Damit dürfte ein Fehler in der 3.ten SQL Anweisung ausgeschlossen sein.

    funktionierendes Beispiel mit 2 Abfragen:
    Code:
    SELECT x.k AS Klasse, sum(x.a) AS Anzahl, sum(x.b) AS weiblich
    
    FROM [
        
        SELECT Klasse as k, 
                     count(*) as a, 
                     NULL as b
                     
        FROM SVP09
        GROUP BY Klasse
    
     UNION ALL
    
       SELECT Klasse as k, 
                    NULL as a, 
                    count(*) AS b  
                    
         FROM SVP09
         WHERE Geschlecht LIKE "w"
         GROUP BY Klasse
      
     ].
    
     AS x
    
    GROUP BY x.k;
    Erweitertes Beispiel mit 3 Abfragen:
    Code:
    SELECT x.k AS Klasse, sum(x.a) AS Anzahl, sum(x.b) AS weiblich, sum(x.c) AS c
    
    FROM [
        
        SELECT Klasse as k, 
                     count(*) as a, 
                     NULL as b,
                     NULL as c 
        FROM SVP09
        GROUP BY Klasse
    
     UNION ALL
    
       SELECT Klasse as k, 
                    NULL as a, 
                    count(*) AS b,  
                    NULL as c
         FROM SVP09
         WHERE Geschlecht LIKE "w"
         GROUP BY Klasse
    
      UNION ALL
    
         SELECT Klasse as k,
                      NULL as a, 
                      NULL as b,
                      count(*) as c
    
         FROM SVP09
         WHERE Geschlecht LIKE "w"
         GROUP BY Klasse
     ].
    
     AS x
    
    GROUP BY x.k;
    Kann mir da jemand helfen, ich sehe den Fehler nicht.

    Gruß

    Nico

  • #2
    Kann mir da jemand helfen, ich sehe den Fehler nicht.
    ... und ich sehe die Fehlermeldung nicht - da wirst du wohl auf jemanden mit einer Glaskugel warten müssen
    Abgesehen davon meinst du wohl nicht "Erweiterung um eine 3. Spalte" sondern um ein 3. Select, im dritten Select wirst du wahrscheinlich auch auf ...WHERE Geschlecht LIKE "m" abfragen, "w" hattest du ja bereits, dann wirst du als Ergebnis auch keine Werte sondern immer NULL kriegen, da du die jeweiligs "leeren" Spalten mit NULL statt mit '0' belegst und zB. NULL + 3 nicht 3 sondern NULL ergibt. Aber ansonsten fällt mir da nichts weiteres auf, daher wäre jetzt die Fehlermeldung wichtig ...


    bye,
    Helmut

    Comment


    • #3
      Falls Dein SQL-Dialect CASE kennt, kann man das ja in einer Abfrage machen...

      SELECT Klasse AS k
      , COUNT (CASE Geschlecht = 'w' THEN 1 ELSE 0 END) As w
      , COUNT (CASE Geschlecht = 'm' THEN 1 ELSE 0 END) As m
      FROM SVP09
      GROUP BY Klasse

      Comment


      • #4
        Wobei SUM hier besser funktioniert, als ein COUNT.
        Olaf Helper

        <Blog> <Xing>
        * cogito ergo sum * errare humanum est * quote erat demonstrandum *
        Wenn ich denke, ist das ein Fehler und das beweise ich täglich

        Comment


        • #5
          Originally posted by O. Helper View Post
          Wobei SUM hier besser funktioniert, als ein COUNT.
          wo Du recht hast, haste recht

          Comment


          • #6
            Originally posted by hwoess View Post
            ... und ich sehe die Fehlermeldung nicht - da wirst du wohl auf jemanden mit einer Glaskugel warten müssen
            Abgesehen davon meinst du wohl nicht "Erweiterung um eine 3. Spalte" sondern um ein 3. Select, im dritten Select wirst du wahrscheinlich auch auf ...WHERE Geschlecht LIKE "m" abfragen, "w" hattest du ja bereits, dann wirst du als Ergebnis auch keine Werte sondern immer NULL kriegen, da du die jeweiligs "leeren" Spalten mit NULL statt mit '0' belegst und zB. NULL + 3 nicht 3 sondern NULL ergibt. Aber ansonsten fällt mir da nichts weiteres auf, daher wäre jetzt die Fehlermeldung wichtig ...


            bye,
            Helmut
            Hallo Helmut,

            die Fehlermeldung lautet "Datentypen in Kriterienausdruck unverträglich"

            Beispiel nun mit 3.ter richtiger Spalte
            Code:
            SELECT x.k AS Klasse, sum(x.a) AS Anzahl, sum(x.b) AS weiblich, sum(x.c) AS Anzahl_Auslaender
            FROM [
                
                SELECT Klasse as k, 
                             count(*) as a, 
                             NULL as b,
                             NULL as c
                             
                FROM SVP09
                GROUP BY Klasse
            
             UNION ALL
            
               SELECT Klasse as k, 
                            NULL as a, 
                            count(*) AS b,
                            NULL as c  
                            
                 FROM SVP09
                 WHERE Geschlecht LIKE "w"
                 GROUP BY Klasse
            
             UNION All
             
                SELECT Klasse as k,
                              NULL as a, 
                              NULL as b,
                              count(*) as c
            
                 FROM SVP09
                 WHERE Land NOT  LIKE "Deutschland"
                 GROUP BY Klasse
            
              
             ]. AS x
            GROUP BY x.k;
            Gruß Nico

            Comment


            • #7
              Hmm, sehe im Moment den Fehler nicht.
              Hast du das schon mal in Teilen ausprobiert, also zuerst mal jedes Select einzeln für sich (immer mit allen 3 Spalten), dann das oberste und das unterste select gemeinsam (das oberste und das mittlere zusammen gehen ja, hast du gesagt) und noch das mittlere und das untere select gemeinsam immer mit dem "Union All" verbunden, wenn das soweit geht die 3 Selects mit dem "Union All" dazu, dann die Zusammenfassung zu "X" mit einem einfachen select * from (...) as X und dann mal ein select sum(x.c) as c from .... ??

              bye,
              Helmut

              PS: um welche Datenbank geht's eigentlich? Ich kennen keine, wo man für die Klammerung der 3 Selects eine eckige Klammer verwendet mit einem Punkt dahinter. Und außerdem kann auch das Ergebnis eigentlich keine Summen liefern, solange die "nicht benutzten" Felder mit NULL statt mit "0" belegt werden. Irgendwie passt mir da was noch nicht ...

              Comment


              • #8
                Hallo Helmut,

                jetzt hab ichs. Du hattes eigentlich schon in Deinem ersten Beitrag darauf hingewiesen
                0 statt NULL zu nehmen, wenn man summiert.
                Klingt ja auch logisch.
                Komisch nur, das es bei 2 Selects funktioniert hat.

                Auf jedenfall geht es jetzt so:
                Code:
                SELECT x.k AS Klasse, sum(x.a) AS Anzahl, sum(x.b) AS weiblich, sum(x.c) AS Anzahl_Auslaender
                FROM [
                    
                    SELECT Klasse as k, 
                                 count(*) as a, 
                                 0 as b,
                                 0 as c
                                 
                    FROM SVP09
                    GROUP BY Klasse
                
                 UNION ALL
                
                   SELECT Klasse as k, 
                                0 as a, 
                                count(*) AS b,
                                0 as c  
                                
                     FROM SVP09
                     WHERE Geschlecht LIKE "w"
                     GROUP BY Klasse
                
                 UNION All
                 
                    SELECT Klasse as k,
                                  0 as a, 
                                  0 as b,
                                  count(*) as c
                
                     FROM SVP09
                     WHERE Land NOT  LIKE "Deutschland"
                     GROUP BY Klasse
                
                  
                 ]. AS x
                GROUP BY x.k;
                Vielen Dank

                Nico

                Comment

                Working...
                X