Announcement

Collapse
No announcement yet.

GROUP BY mit Subselect in FB 1.5?

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

  • GROUP BY mit Subselect in FB 1.5?

    Hallo,

    ich habe eine Tabelle mit Personendaten. Jede dieser Personen ist an potentiell beliebig vielen Projekten beteiligt. Ich habe eine Stored Procedure, die (bei gegebener Personen-ID) berechnet, an wievielen Projekten eine Person beteiligt ist. Jetzt möchte ich für eine Statistikfunktion eine Balkengrafik ausgeben lassen, wieviele Personen jeweils wie erfahren sind: Also einen Balken für alle, die bei keinem Projekt dabei sind, den nächsten Balken für alle mit 1 Projekt, dann mit 2 Projekten und so weiter... so viele Balken, bis irgendwann die höchste vorhandene Projektanzahl einer Person erreicht ist. Das Ganz aufgeschlüsselt nach Geschlecht (nicht wundern, ich habe noch ein drittes Geschlecht in der Tabelle, aber das ist ja egal).

    Dazu habe ich folgenden Code:

    <TT>
    SELECT
    (SELECT anzahl FROM
    getprojektanzahl(t_persdaten.pers_id)) AS zaehler
    ,COUNT(*) AS gesamtzahl
    ,COUNT(CASE geschlecht WHEN 'M' THEN 1 ELSE NULL END) AS maenner
    ,COUNT(CASE geschlecht WHEN 'W' THEN 1 ELSE NULL END) AS frauen
    ,COUNT(CASE geschlecht WHEN 'I' THEN 1 ELSE NULL END) AS institutionen
    FROM t_persdaten
    GROUP BY zaehler
    ORDER BY zaehler
    </TT>
    <BR>

    Klappt aber leider nicht. COLUMN UNKNOWN: ZAEHLER, sagt er mir. Wenn ich, um vom Spaltennamen wegzukommen, stattdessen GROUP BY 1 ORDER BY 1 hinschreibe, heißt es:

    <TT>Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause).</TT>

    Ich verstehe nur nicht warum. Alles ist entweder gegroupt oder in COUNT untergebracht. Wo liegt mein Denkfehler? Oder ist das ein Ding von FB, dass ich nicht nach einem Subselect GROUPen kann?

    Ach ja, das AS weglassen und unten GROUP BY anzahl usw. zu schreiben, funktioniert auch nicht. COLUMN UNKNOWN.

    Schon mal vielen Dank,

    Stefan Balzter

  • #2
    Hm.... das ist jetzt bald zwei Wochen her. Hat wirklich niemand eine Ahnung, was an diesem SQL-Code nicht stimmt? Oder hab ich irgendwelche wichtigen Infos nicht gegeben? Dann fragt doch bitte nach

    Comment


    • #3
      Hallo Stefan,

      da das Select so von Firebird nicht unterstützt wird gibt es 2 mögliche Alternativen.

      1) erstelle ein View mit dem SQL ohne "GROUP BY + ORDER BY"
      auf diesen kannst Du dann problemlos Groupieren
      Wobei ich mir nicht ganz 100%ig sicher bin ob dass mit dem Subselect in einem View funktioniert. Einen versuch ist es aber allemal wert.

      2) statt einem View könnte man das auch über eine Stored Procedure verwenden


      Die 2 Alternative würde ich aber nur angehen wenn Alternative 1 nicht funktioniert.

      Gruß

      Torste

      Comment


      • #4
        hallo torsten,

        danke für die tipps. ich werd's mal ausprobieren.

        Stefa

        Comment


        • #5
          In einer GROUP BY Anweisung dürfen nur einfache Felder auftreten. Zähler ist aber ein errechnetes feld

          Gruss Henr

          Comment


          • #6
            Hallo Henri,
            Firebird 1.5 unterstützt ein GROUP BY nach dem Ordinalwert des Feldes in der Feldliste einer SELECT-Anweisung.
            <br>
            Schöne Grüße,
            Thoma
            Thomas Steinmaurer

            Firebird Foundation Committee Member
            Upscene Productions - Database Tools for Developers
            Mein Blog

            Comment

            Working...
            X