kat: Gruppierungen / Zählen / Summieren

Hi Zusammen,

ich habe gerade ein Brett vor'm Kopf. ;-)

Ich habe zwei Tabellen,

Pos:
No|Header_No|GroupNo|Date
01|1        |x      |01.01.2007
02|2        |y      |05.01.2007
03|2        |y      |07.02.2007
04|3        |z      |08.01.2007
05|3        |z      |08.01.2007

Header:

Ich möchte alle B_No zu GroupNo gruppiert, nur wenn das Datum unterschiedlich ist, wenn es für alle Positionen gleich ist, sollen diese nicht mitgezählt werden werden.

gewünschtes Ergebnis:
GroupNo | Count(DISTINCT B_No)
y       | 2

Ich schreibe mal extra nicht meine lösung hier auf.

Problem in der WHERE-Klausel kann man keine Count-Abfrage auf eine Gruppierung machen. Wie bekomme ich diese Daten rausgefiltert?

  1. Ich schreibe mal extra nicht meine lösung hier auf.

    Erste Idee: Ein SELECT DISTINCT auf spezielle Datenfelder kombiniert mit der Aggregatfunktion COUNT und einem "angemessenen" GROUP BY.

    1. Dann habe ich alle, wie zähle ich die Positionen nicht mit, bei denen das Datum für die Gruppierung immer gleich ist. Ich möchte das sie wegfallen.

      WHERE COUNT(DISTINCT Date) > 1 im Prinzip, wenn's denn gehen würde

      Ich schreibe mal extra nicht meine lösung hier auf.

      Erste Idee: Ein SELECT DISTINCT auf spezielle Datenfelder kombiniert mit der Aggregatfunktion COUNT und einem "angemessenen" GROUP BY.

      1. Dann habe ich alle, wie zähle ich die Positionen nicht mit, bei denen das Datum für die Gruppierung immer gleich ist. Ich möchte das sie wegfallen.

        Wenn Du bspw. auf
        04|3        |z      |08.01.2007
        05|3        |z      |08.01.2007
        mit einem SELECT DISTINCT DF2,DF3,DF4 gehst, kriegst Du natürlich nicht alle Datensätze, sondern nur einen einzigen.

        1. siehe ilja - having ist die lösung

          ich will auch nicht einen einzigen, ich will keinen dann

  2. yo,

    Problem in der WHERE-Klausel kann man keine Count-Abfrage auf eine Gruppierung machen. Wie bekomme ich diese Daten rausgefiltert?

    SELECT  GroupNo, Count(*)
    FROM tabelle
    GROUP BY GroupNo
    HAVING COUNT(DISTINCT date) > 1

    Ilja

    1. yo,

      Problem in der WHERE-Klausel kann man keine Count-Abfrage auf eine Gruppierung machen. Wie bekomme ich diese Daten rausgefiltert?

      SELECT  GroupNo, Count(*)
      FROM tabelle
      GROUP BY GroupNo
      HAVING COUNT(DISTINCT date) > 1

      Ilja

      DANKE

      ... ich wusste doch, da war noch was ...

      lol