Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Finden Sie Spalten, die nur Nullen enthalten

declare @T table
(
  Col1 int,
  Col2 int,
  Col3 int,
  Col4 int
)

insert into @T values
(1,   0   , null, null),
(0,   null, 0   , 1)

select U.ColName
from
  (
    select count(nullif(Col1, 0)) as Col1,
           count(nullif(Col2, 0)) as Col2,
           count(nullif(Col3, 0)) as Col3,
           count(nullif(Col4, 0)) as Col4
    from @T
  ) as T
unpivot
  (C for ColName in (Col1, Col2, Col3, Col4)) as U
where U.C = 0

Ergebnis:

ColName
----------
Col2
Col3

Die Idee dahinter ist, die Nicht-null zu zählen Werte und behalte nur solche mit einem Zählerstand von 0 .

COUNT zählt nur Nicht-Null-Werte.
NULLIF(ColX, 0) macht alle 0 in null .
Die innere Abfrage gibt eine Zeile mit vier Spalten zurück. UNPIVOT wird es umdrehen, sodass Sie zwei Spalten und vier Zeilen haben.
Schließlich where U.C = 0 stellt sicher, dass Sie nur die Spalten erhalten, die keine anderen Werte als null haben oder 0 .