klerafukan: count

Hallo!

Ich arbeite auf Access2003 und stehe vor folgendem Problem:

Ich habe eine Tabelle die ein Feld Status beinhaltet.
Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...

Wie kann ich solche counts schachteln?

Vielen Dank!

Til

  1. yo,

    Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...

    Wie kann ich solche counts schachteln?

    mit einer gruppierung über die spalte status:

    SELECT status, COUNT(*) Anzahl
    FROM tabelle
    GROUP BY status
    ;

    Ilja

    1. Hallo Ilja,

      das Problem ist, dass ich mit den Werten innerhalb SQL noch "weiterrechnen" will.
      Also im Klartext, ist habe Status: "erfüllt", "entfällt" und "offen".

      Ich will jetzt in einer SQL Abfrage die Formel:

      Sum(erfüllt) / (Sum(alle) - sum(enfällt)).

      yo,

      Jetzt soll ich einer Abfrage alle zählen, die Status1 haben, alle die Status2 haben...

      Wie kann ich solche counts schachteln?

      mit einer gruppierung über die spalte status:

      SELECT status, COUNT(*) Anzahl
      FROM tabelle
      GROUP BY status
      ;

      Ilja

      1. yo,

        Sum(erfüllt) / (Sum(alle) - sum(enfällt)).

        in diesem fall ist die sachlage ein wenig anders. wenn es dir nur um die Summen geht, kannst du am besten mit CASE arbeiten, wobei ich noch mal auf "punkt vor strichrechnung" hinweisen will.

        SELECT SUM(CASE
                       WHEN t.status = 'erfüllt'
                       THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
                       ELSE 0
                   END
                  ) /
               SUM(t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht) -
               SUM(CASE
                       WHEN t.status = 'entfällt'
                       THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
                       ELSE 0
                   END
                  ) Ergebnis
        FROM tabelle t
        ;

        Ilja

        1. Hallo Ilja,

          vielen Dank, das sieht doch schon gut aus.
          Ich studiere zwar Informatik und habe auch schon viel mit SQL gearbeitet, aber diese CASE Sachen kenne ich nur aus Java.
          Wie ist denn da die generelle Syntax? Er will irgendeinen Operator noch haben (habe ich erwähnt, dass ich auch Access 2003 arbeite?)

          Dann noch eine Frage zu dem "t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht":
          Ist das eine Tabellenspalte, die ich anlegen muß? Oder wie ist das gemeint?

          also nehmen wir mal an, meine Tabelle sieht so aus:

          +----------------------+
          | Forderung  | Status  |
          +----------------------+
          | grün       | erfüllt |
          | rot        | offen   |
          | blau       | offen   |
          | gelb       | entfällt|
          | türkis     | erfüllt |
          | orange     | entfällt|
          +----------------------+

          Dann will ich haben :

          erfüllt (2) / (alle (6) - entfällt (2))

          (Also siehe Klammerung, die Substraktion zuerst)

          = 1/2 oder 0,5

          Das soll das Ergebnis sein.

          Grüße

          yo,

          Sum(erfüllt) / (Sum(alle) - sum(enfällt)).

          in diesem fall ist die sachlage ein wenig anders. wenn es dir nur um die Summen geht, kannst du am besten mit CASE arbeiten, wobei ich noch mal auf "punkt vor strichrechnung" hinweisen will.

          SELECT SUM(CASE
                         WHEN t.status = 'erfüllt'
                         THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
                         ELSE 0
                     END
                    ) /
                 SUM(t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht) -
                 SUM(CASE
                         WHEN t.status = 'entfällt'
                         THEN t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht
                         ELSE 0
                     END
                    ) Ergebnis
          FROM tabelle t
          ;

          Ilja

          1. yo,

            Dann noch eine Frage zu dem "t.Spalte_wo_die_werte_zur_aufsummierung_drinne_steht":
            Ist das eine Tabellenspalte, die ich anlegen muß? Oder wie ist das gemeint?

            es war eine vermutung von mir, dass es eine solche spalte gibt, weil du die Aggregat-funktion SUM anstellte von COUNT verwendet hast. die statuswerte lassen sich aber nicht summieren, da es sich um strings handelt. insofern habe ich darauf geschlossen, du hast noch solch eine spalte. dem scheint aber nicht so zu sein, dann benutze einfach wieder COUNT und ändere die CASE anweisung entsprechend mit NULL.

            SELECT COUNT(CASE
                            WHEN t.status = 'erfüllt'
                            THEN t.status
                            ELSE NULL
                        END
                       ) /
                    SUM(t.status) -
                    SUM(CASE
                            WHEN t.status = 'entfällt'
                            THEN t.status
                            ELSE NULL
                        END
                       ) Ergebnis
            FROM tabelle t
            ;

            Ilja