# SQL Abfrage: Feldname und gleichzeitig Anzahl gefüllter Felder ausgeben



## teefit (12. Oktober 2009)

Hallo zusammen.

Nachdem selbst google mir nicht mehr weiterhelfen kann, vielleicht könnt ihr es.

Ich würde gerne die feldnamen einer tabelle ausgeben, und dann gleichzeitig die Anzahl der Datensätze, bei denen der Wert in diesem Feld nicht null ist.
Also ein Beispiel:

Tabelle 1 hat die Spalten Vorname und Nachname.
Das weiss ich aber nicht, könnte auch vorname, nachname, Stadt sein.
Angenommen: Es gibt 30 Datensätze.
Davon sind bei 20 der Vorname, und bei 10 der Nachname gefüllt, der rest ist leer (NULL)

wie müsste die SQL-Abfrage aussehen, damit ich so ein Ergebnis bekomme:

Vorname(20), Nachname(10), [Stadt(23),...,...,...]

?

Schon mal danke für die Hilfe!


----------



## fantatrinker (13. Oktober 2009)

Hallo,

spontan würde ich das Problem so lösen:

SELECT 
COUNT(t1.Vorname) AS Vorname
,COUNT(t1.Nachname) AS Nachname
,COUNT(t1.Stadt) AS Stadt
FROM Tabelle1 AS t1
WHERE 
t1.Vorname IS NOT NULL
OR t1.Nachname IS NOT NULL
OR t1.Stadt IS NOT NULL

Ergebnis wäre:

Vorname    Nachname     Stadt
20                10                     23

Eine Ausgabe wie "Vorname(20), Nachname(10), [Stadt(23),...,...,...]" ist nicht ganz so einfach,
da hier Varchar-Werte und Int-Werte vermischt werden.
Da ist dann ein Fall für 'CAST' oder 'CONVERT'. 
Die Statements dazu weiß ich aber gerade nicht aus dem Kopf.


----------



## teefit (13. Oktober 2009)

Hallo Fanta

Danke für die Antwort.


Das mit dem Zusammenfügen sollte nicht so das problem werden, wäre auch ok wenn das ergebnis eine eigene Zahl wäre, also ..... as NumberVorname.

Aber!

Das Problem ist, dass ich nicht weiss wie die Spalten heissen und es immer unterschiedlich viele sind.

Ich brauche also ein select  * um alle auszugeben, davon brauche ich dann den Feldnamen und dann die Anzahl der gefüllten felder dieses feldnamens.

Du setzt ja voraus, dass du die feldnamen kennst....

LG, teefit


----------



## fantatrinker (13. Oktober 2009)

Das liefert dir zumindest im MS-SQL-Server die Spaltennamen.

SELECT COLUMN_NAME 
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'Tabelle1'


Hier noch etwas anders umgesetzt, mit Information über die Position der Spalte in der Tabelle.

SELECT 
COL_NAME(OBJECT_ID('Tabelle1'),ORDINAL_POSITION) AS Spaltenname
,ORDINAL_POSITION AS Position
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = ''Tabelle1''


Für mehr habe ich gerade keine Zeit.
Mit einem Skript und Laufzeitvariablen solltest du dir ein entsprechendes Statement zusammenstellen könnne.

Gruß fantatrinker


----------

