[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2012
    Beiträge
    360

    SQL CASE COUNT()

    Hallo liebes Forum,

    ich hätte gerne eine Nummer SNR aufgelistet wie oft sie in einer anderen Datei(Feld FD1) vorkommt bzw. in Verbindung steht.

    Code:
    SELECT SNR, 
    Case when 
    (Select COUNT(*) FROM BWP, BSP  WHERE SNR = FD1) > 0 then COUNT(SNR) else 0 end , 
    DAT, TIM FROM BWP, BSP WHERE SNR   
    = FD1 AND SNR <> ' ' AND DAT >= 0 AND BHND >= 0 OR        
    (SNR not in(select fd1 from BWP)) GROUP BY SNR ,         
    DAT, TIM
    
    Anzeige:
    Nummer      Ausdruck CASE
     200                15.341
     100                     1
    Nummer 200 hat keine Verbindung zur anderen Datei, aber da bekomme ich die Maximale Anzahl der Sätze von der ganzen Datei.
    Was ist falsch an meinem Statement?

    Gruß

    Tarki

  2. #2
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Probiers mal so:
    PHP-Code:
    SELECT FELD1COALESCE(ANZAHL0
    FROM DATEI1 LEFT OUTER JOIN 
    SELECT FELD2COUNT(*) AS ANZAHL 
    FROM DATEI2 GROUP BY FELD2
    ) AS D2 ON FELD1=FELD2 

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... alles viel zu kompliziert, ein einfacher subselect tut es:

    select e.snr, (select count(*)
    from andereTabelle a
    where e.snr = a....
    ...) anzahl, e.nocheinFeld...

    from eineTabelle e

    D*B
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  4. #4
    Registriert seit
    Apr 2012
    Beiträge
    360
    Hallo,

    der Subselect war auch meine erste Überlegung, aber da bekomme ich in beiden Fällen immer eine 1 zurückgeliefert

    Code:
    SELECT SNR,                                                       
    (Select COUNT(*) FROM BWP D, BSP C WHERE D.SNR = C.FD1) ANZAHL,   
    DAT, TIM FROM BWP A, BSP B                                        
    WHERE SNR <> ' ' AND DAT >= 0 AND BHND >= 0 OR                    
    (SNR not in(select fd1 from BWP)) GROUP BY SNR ,                  
    DAT, TIM

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.247
    Du zählst ja auch die falsche Datei!
    da BWP auch deine Hauptdatei ist, erhälst du immer die 1.
    Du musst die BSP zählen:

    (Select COUNT(*) FROM BSP C WHERE A.SNR = C.FD1) ANZAHL,
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.875
    Könnte es nicht sein, das dieser einfache Join ohne Subselect oder Common Table Expression das gewünschte Ergebnis liefert?

    Code:
    SELECT SNR, Count(Fld1) Anzahl, 
           DAT, TIM 
    FROM BWP Left Outer join BSP on SNR = FD1 
    WHERE     SNR   <> ' ' 
          AND DAT   >= 0 
          AND BHND  >= 0 
    GROUP BY SNR , DAT, TIM
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  7. #7
    Registriert seit
    Apr 2012
    Beiträge
    360
    Danke euch allen,

    Fürchau hatte damit recht das ich die Falsche Datei zähle. Peinlicher Denkfehler.

    Lg

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.247
    @Birgitta
    Bei einer 1:N-Beziehung liefert dieser SQL die Daten aus BWP mehrfach, was hier nicht gewünscht wird.
    Ein Group By verlangsamt das ganze nur.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. SQL CASE Anweisung
    By Bobou in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 12-04-11, 13:09
  2. dynamisches Group by funktioniert nicht
    By Tobse77 in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 24-09-09, 08:31
  3. SQL Case von mehreren Dateien
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 08-08-06, 09:34
  4. SQL - Fehler
    By Kaufmann in forum IBM i Hauptforum
    Antworten: 11
    Letzter Beitrag: 28-06-06, 14:11
  5. Cobol-Programm mit Embedded SQL (SELECT CASE)
    By klausgkv in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 08-06-06, 13:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •