Announcement

Collapse
No announcement yet.

Wahrscheinlich sehr simpel, hab grad nen Brett vorm Kopf ;)

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

  • Wahrscheinlich sehr simpel, hab grad nen Brett vorm Kopf ;)

    Hab gerade irgendwie nen Brett vorm Kopf ;( , deshalb nun hier mein versuch !

    Aus dieser Tabelle (stark gekürzt):

    Teilnehmer Dauer Gespräche
    Nummer1 3 5
    Nummer1 7 2
    Nummer1 15 1
    Nummer2 30 2
    .....

    Möchte ich für jeden Teilnehmer einen Datensatz, welcher wie folgt aufgebaut ist:

    Teilnehmer
    Summe_Dauer, bei der die Dauer >0 und <5 ist
    Anzahl aller Gespräche mit Dauer >0 und <5
    Summe_Dauer, bei der die Dauer >5 und <10 ist
    Anzahl aller Gespräche mit Dauer >5 und <10
    Summe_Dauer, bei der die Dauer >10 und < 15 ist
    Anzahl aller Gespräche mit Dauer >10 und < 15
    Summe_Dauer, bei der die Dauer >15 ist
    Anzahl aller Gespräche mit Dauer >15
    Gesamt Dauer
    Gesamt Gespräche

    Aus obigen Beispiel würde also :

    Nummer1 3 5 7 2 15 1 0 0 25 8
    Nummer2 0 0 0 0 0 0 30 2 30 2


    Danke Euch !!!

  • #2
    Select Teilnehmer, (select Sum(Dauer) from TeilnehmerTabelle as T1 Where Dauer > 0 and Dauer < 5 and T1.Teilnehmer = TeilnehmerTabelle.Teilnehmer) AS Dauer1, (select Sum(Dauer) from TeilnehmerTabelle as T1 Where Dauer > 5 and Dauer < 10 and T1.Teilnehmer = TeilnehmerTabelle.Teilnehmer) AS Dauer2, ... FROM TeilnehmerTabelle ORDER BY Teilnehmer GROUP BY Teilnehmer

    Irgendwie so sollte es funktionieren.

    gruss Roland
    http://www.entwicklerblog.com

    There are 10 kind of people in this world, those who know binary, and those who don't.

    Comment


    • #3
      jo, danke , du hast recht !

      Comment


      • #4
        Originally posted by Teac View Post
        Select Teilnehmer, (select Sum(Dauer) from TeilnehmerTabelle as T1 Where Dauer > 0 and Dauer < 5 and T1.Teilnehmer = TeilnehmerTabelle.Teilnehmer) AS Dauer1, (select Sum(Dauer) from TeilnehmerTabelle as T1 Where Dauer > 5 and Dauer < 10 and T1.Teilnehmer = TeilnehmerTabelle.Teilnehmer) AS Dauer2, ... FROM TeilnehmerTabelle ORDER BY Teilnehmer GROUP BY Teilnehmer

        Irgendwie so sollte es funktionieren.

        gruss Roland
        Hallo,
        ORDER BY kommt doch nach der GROUP BY !!!

        Falls noch Interesse da ist, hier kleine DB mit der Variante von Roland:

        ------------ BEGINN --------------------------
        CREATE TABLE telefon
        (
        NAME VARCHAR2(5),
        DAUER NUMBER(6),
        DATUM DATE DEFAULT SYSDATE
        );

        desc telefon;

        insert into telefon values ('Eva',11,sysdate);
        insert into telefon values ('Eva',14,sysdate);
        insert into telefon values ('Heini',15,sysdate);
        insert into telefon values ('Heini',25,sysdate);
        insert into telefon values ('Eva',4,sysdate);
        insert into telefon values ('Eva',7,sysdate);
        insert into telefon values ('Heini',5,sysdate);
        insert into telefon values ('Heini',1,sysdate);
        insert into telefon values ('Eva',8,sysdate);
        insert into telefon values ('Eva',2,sysdate);
        insert into telefon values ('Heini',3,sysdate);
        insert into telefon values ('Heini',9,sysdate);
        insert into telefon values ('Eva',17,sysdate);
        insert into telefon values ('Eva',26,sysdate);
        insert into telefon values ('Heini',3,sysdate);
        insert into telefon values ('Heini',5,sysdate);

        select * from telefon;

        Select name,
        (select Sum(Dauer) from telefon T1 Where Dauer > 0 and Dauer < 5 and T1.name= telefon .name) "0 bis 4",
        (select Sum(Dauer) from telefon T1 Where Dauer > 4 and Dauer < 10 and T1.name= telefon .name) "5 bis 9",
        (select Sum(Dauer) from telefon T1 Where Dauer > 9 and Dauer < 15 and T1.name= telefon .name) "10 bis 14",
        (select Sum(Dauer) from telefon T1 Where Dauer > 14 and Dauer < 20 and T1.name= telefon .name) "15 bis 19",
        (select Sum(Dauer) from telefon T1 Where Dauer > 19 and Dauer < 25 and T1.name= telefon .name) "20 bis 24",
        (select Sum(Dauer) from telefon T1 Where Dauer > 24 and T1.name= telefon .name) "25 bis ?" FROM telefon
        GROUP BY name
        ORDER BY name

        -------------------- ENDE ----------------------------

        Comment


        • #5
          ohne Subqueries

          [HIGHLIGHT="sql"]
          CREATE TABLE #telefon
          ( NAME VARCHAR(5),
          DAUER INTEGER,
          DATUM DATETIME DEFAULT GetDate ()
          );
          insert into #telefon (Name, Dauer)
          SELECT 'Eva',11
          UNION ALL SELECT 'Eva',14
          UNION ALL SELECT 'Heini',15
          UNION ALL SELECT 'Heini',25
          UNION ALL SELECT 'Eva',4
          UNION ALL SELECT 'Eva',7
          UNION ALL SELECT 'Heini',5
          UNION ALL SELECT 'Heini',1
          UNION ALL SELECT 'Eva',8
          UNION ALL SELECT 'Eva',2
          UNION ALL SELECT 'Heini',3
          UNION ALL SELECT 'Heini',9
          UNION ALL SELECT 'Eva',17
          UNION ALL SELECT 'Eva',26
          UNION ALL SELECT 'Heini',3
          UNION ALL SELECT 'Heini',5
          ;
          Select name,
          Sum(CASE WHEN Dauer > 0 and Dauer < 5 THEN Dauer ELSE 0 END) AS "0 bis 4",
          Sum(CASE WHEN Dauer > 4 and Dauer < 10 THEN Dauer ELSE 0 END) AS "5 bis 9",
          Sum(CASE WHEN Dauer > 9 and Dauer < 15 THEN Dauer ELSE 0 END) AS "10 bis 14",
          Sum(CASE WHEN Dauer > 14 and Dauer < 20 THEN Dauer ELSE 0 END) AS "15 bis 19",
          Sum(CASE WHEN Dauer > 19 and Dauer < 25 THEN Dauer ELSE 0 END) AS "20 bis 24",
          Sum(CASE WHEN Dauer > 24 THEN Dauer ELSE 0 END) AS "25 bis ?"
          FROM #telefon
          GROUP BY name
          ORDER BY name
          ;
          DROP TaBLE #Telefon;
          [/HIGHLIGHT]

          Comment


          • #6
            Besten Dank

            Comment

            Working...
            X