Announcement

Collapse
No announcement yet.

Count-Abfrage über mehre Tabellen

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

  • Count-Abfrage über mehre Tabellen

    Hallo,

    ich stehe wieder einmal vor einer Aufgabenstellung, bei der ich einfach keine zufriedenstellende Lösung finde. Ich muß dazu Kunden zählen, die in verschiedenen Artikelgruppen vorkommen, wobei nur das Ergebnis auszugeben ist:

    Code:
    z.B.
    - Anzahl der Personen, die in irgendeiner ArtGr einen Artikel haben
    'Artikel AA', 1     1
    'Artikel CB', 1
    'Artikel CA', 1
    'Artikel AC', 1
    'Artikel AB', 1     
    'Artikel BA', 2     1
    'Artikel CA', 2
    'Artikel CC', 2
    'Artikel BA', 2
    'Artikel BC', 2
    'Artikel BB', 2     
    'Artikel AA', 3     1
    'Artikel AF', 3     
    'Artikel BG', 5     1
    'Artikel AG', 5
    'Artikel BF', 5     
    'Artikel CF', 7     1
    'Artikel BH', 7     
    'Artikel CH', 9     1
    'Artikel AH', 9
    'Artikel CG', 9     
    ---------------------
    Ergebnis            6
    
    - Anzahl der Personen, die in einer ArtGr einen Artikel haben  
    'Artikel BA', 2    1
    'Artikel BB', 2
    'Artikel BC', 2
    'Artikel BA', 2
    'Artikel BF', 5    1
    'Artikel BG', 5
    'Artikel BH', 7    1
    --------------------
    Ergebnis           3
    
    - Anzahl der Personen, die entweder in ArtGr_A Und ArtGr_B oder in ArtGr_C einen Artikel haben 'Artikel AB', 1   1
    'Artikel AC', 1
    'Artikel AA', 1   
    'Artikel BB', 2   1
    'Artikel BA', 2
    'Artikel BC', 2
    'Artikel BA', 2   
    'Artikel AA', 3   1
    'Artikel AF', 3
    'Artikel BG', 5   1
    'Artikel AG', 5
    'Artikel BF', 5
    'Artikel BH', 7   1 
    'Artikel AH', 9   1
    'Artikel CA', 1        1
    'Artikel CB', 1
    'Artikel CC', 2        1
    'Artikel CA', 2
    'Artikel CF', 7        1
    'Artikel CG', 9        1
    'Artikel CH', 9
    -------------------------
    Ergebnis          6    4
    Code:
    create table TestPers 
    (
       Id                   NUMBER(10)           not null,
       name                 VARCHAR2(50)
    );
    insert into TestPers values( 1, 'Person 1' );        
    insert into TestPers values( 2, 'Person 2' );
    insert into TestPers values( 3, 'Person 3' );
    insert into TestPers values( 4, 'Person 4' );
    insert into TestPers values( 5, 'Person 5' );
    insert into TestPers values( 6, 'Person 6' );
    insert into TestPers values( 7, 'Person 7' );
    insert into TestPers values( 8, 'Person 8' );
    insert into TestPers values( 9, 'Person 9' );
    
    create table ArtGr_A 
    (
       Id                   NUMBER(10)           not null,
       Artikel              VARCHAR2(50),
       TestPers_Id          NUMBER(10)           not null
    );    
    insert into ArtGr_A values( 1, 'Artikel AA', 1 ); 
    insert into ArtGr_A values( 2, 'Artikel AB', 1 );
    insert into ArtGr_A values( 3, 'Artikel AC', 1 );
    insert into ArtGr_A values( 4, 'Artikel AA', 3 );
    insert into ArtGr_A values( 5, 'Artikel AF', 3 );
    insert into ArtGr_A values( 6, 'Artikel AG', 5 );
    insert into ArtGr_A values( 7, 'Artikel AH', 9 ); 
     
    create table ArtGr_B 
    (
       Id                   NUMBER(10)           not null,
       Artikel              VARCHAR2(50),
       TestPers_Id          NUMBER(10)           not null
    );    
    insert into ArtGr_B values( 1, 'Artikel BA', 2 ); 
    insert into ArtGr_B values( 2, 'Artikel BB', 2 );
    insert into ArtGr_B values( 3, 'Artikel BC', 2 );
    insert into ArtGr_B values( 4, 'Artikel BA', 2 );
    insert into ArtGr_B values( 5, 'Artikel BF', 5 );
    insert into ArtGr_B values( 6, 'Artikel BG', 5 );
    insert into ArtGr_B values( 7, 'Artikel BH', 7 );     
    
    create table ArtGr_C 
    (
       Id                   NUMBER(10)           not null,
       Artikel              VARCHAR2(50),
       TestPers_Id          NUMBER(10)           not null
    );    
    insert into ArtGr_C values( 1, 'Artikel CA', 1 ); 
    insert into ArtGr_C values( 2, 'Artikel CB', 1 );
    insert into ArtGr_C values( 3, 'Artikel CC', 2 );
    insert into ArtGr_C values( 4, 'Artikel CA', 2 );
    insert into ArtGr_C values( 5, 'Artikel CF', 7 );
    insert into ArtGr_C values( 6, 'Artikel CG', 9 );
    insert into ArtGr_C values( 7, 'Artikel CH', 9 );
    Da mir hier schon geholfen wurde, hoffe ich aus diesmal auf eine Lösung.

    Danke
    Urwi

  • #2
    Versuche mal dieses hier:

    [HIGHLIGHT=sql]
    select p.Id, p.name, a.Artikel, b.Artikel, c.Artikel
    from TestPers p
    left outer join ArtGr_A a on p.Id = a.TestPers_Id
    left outer join ArtGr_B b on p.Id = b.TestPers_Id
    left outer join ArtGr_C c on p.Id = c.TestPers_Id
    [/HIGHLIGHT]

    Die WHERE Bedingung bekommst du vermutlich selber hin.

    Gruss

    Comment


    • #3
      Danke Wernfried,

      ich werde es gleich ausprobieren!

      Comment


      • #4
        Hallo nochmals,

        leider nicht ganz das, was ich meinte.

        Es soll nur das Ergebnis herauskomen
        Ergebnis: 6 (haben einen mindestens einen Artikel)

        Wenn ich Deinen Code ergänze
        Code:
        WHERE a.Artikel IS NOT NULL
          OR  b.Artikel IS NOT NULL
          OR  c.Artikel IS NOT NULL
        GROUP BY p.Id
        bekomme ich
        Code:
        ID         COUNT(*)                               
        ---------- -------------------------------------- 
                 1                                     12
                 2                                      8
                 5                                      2
                 7                                      1
                 3                                      2
                 9                                      2
        Danke
        Urwi

        Comment


        • #5
          COUNT(DISTINCT p.Id)

          und ohne GROUP BY

          Gruss

          Comment


          • #6
            Danke, das war es!

            Urwi

            Comment

            Working...
            X