SQLDB-Abfrage mit LEFT JOIN oder UNION ALL

Steamy2010

Neuer Benutzer
Beiträge
3
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
 
Werbung:

Steamy2010

Neuer Benutzer
Beiträge
3
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:(
 

ukulele

Datenbank-Guru
Beiträge
4.394
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.
 

PLSQL_SQL

Datenbank-Guru
Beiträge
176
Hy,

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

Lg
 

Steamy2010

Neuer Benutzer
Beiträge
3
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
 
Werbung:
Oben