Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

SQLDB-Abfrage mit LEFT JOIN oder UNION ALL

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von Steamy2010, 7 August 2012.

  1. Steamy2010

    Steamy2010 Neuer Benutzer

    Hallo @ all ,
    ich benötige für folgendes Problem Eure Hilfe.
    Ich habe zwei Tabellen. "Vorname", hier sind diverse Vornamen und "Sonderzeichen", hier sind 28 Sonderzeichen enthalten.
    In den Vornamen sind öfters mal Sonderzeichen enthalten. Diese möchte ich nicht löschen oder korrigieren sondern einfach nur zählen und auflisten. Also, welche und wieviele Sonderzeichen kommen in der Tabelle Vornamen vor?
    2.jpg
    Dieses Ergebnis erreiche ich mit folgender Abfrage:
    Code:
    SELECT Zeichen, COUNT(*) AS Anzahl FROM SONDERZEICHEN AS S CROSS JOIN test_vorname AS A WHERE A.vorname LIKE '%[' + Zeichen + ']%'  GROUP BY ZEICHEN
    Jetzt kommen aber nicht immer alle Sonderzeichen vor, oben im Bild sind es ja auch nur 14. Ich möchte, aber dass alle 28 aufgelistet werden und mit Anzahl 0 versehen werden, wenn sie halt nicht vorkommen.
    Wie muss ich meine Abfrage modellieren um zum gewünschten Ergebnis zu kommen??
    LEFT JOIN und UNION ALL hab ich schon angestrebt, aber leider komme ich nicht weiter.
    Wäre für jeden Tipp dankbar
     
  2. ukulele

    ukulele Datenbank-Guru

  3. Steamy2010

    Steamy2010 Neuer Benutzer

    Danke für Deine Antwort, mein Englisch reicht leider nicht dafür aus um Deine vorgeschlagene Seite zu verstehen, aber von den Bildern her sieht das eigentlich recht passend aus:(
     
  4. ukulele

    ukulele Datenbank-Guru

    So das mit dem dynamisch hab ich jetzt nicht versucht, aber generell bekommt man eine schöne Übersicht die hoffentlich hilft:
    Code:
    SELECT    vorname,
            [a],
            [b],
            [c],
            [#]
    FROM    (    SELECT    a.vorname,
                        s.Zeichen,
                        len(a.vorname)-len(replace(a.vorname,s.Zeichen,'')) AS Treffer
                FROM    test_vorname a,
                        SONDERZEICHEN s
            ) datatable
    PIVOT    ( sum(Treffer) FOR Zeichen IN ( [a],[b],[c],[#] ) ) AS pivottable
    Einziger Haken ist noch, das man die Sonderzeichen als Spaltennamen und im IN() Teil in PIVOT angeben muss. SQL scheint bei PIVOT wirklich nur bestimmte Funktionen und keine Unterabfragen oder isnull() Checks zuzulassen.
     
  5. PLSQL_SQL

    PLSQL_SQL Datenbank-Guru

    Hy,

    also ich hätte es über den left join erledigt, wenn du nicht wissen musst, bei welchem Vornamen Sonderzeichen vorkommen!

    Lg
     
  6. Steamy2010

    Steamy2010 Neuer Benutzer

    Guten Morgen und herzlichen Dank für Eure Hilfe :) ,
    hab es aber dann doch mit einem Left Join erledigt.
    Vielen Dank nochmals!!!
    Code:
    SELECT ZEICHEN,COUNT(vorname) AS Vorname FROM SONDERZEICHEN AS S LEFT JOIN test_vorname AS A ON A.vorname LIKE '%[' + Zeichen + ']%' GROUP BY ZEICHEN 
     
  7. ukulele

    ukulele Datenbank-Guru

    Das ist mir zu flach :p
     
    Walter gefällt das.
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden