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

T

teefit

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!
 
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.
 
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
 
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
 
Zurück