sql >> Database teknologi >  >> RDS >> Sqlserver

Find kolonner, der kun indeholder nuller

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

Resultat:

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

Ideen bag dette er at tælle ikke null værdier og behold kun dem med et antal på 0 .

COUNT vil kun tælle ikke-nullværdier.
NULLIF(ColX, 0) vil gøre alle 0 til null .
Den indre forespørgsel returnerer én række med fire kolonner. UNPIVOT vil vende det om, så du har to kolonner og fire rækker.
Til sidst where U.C = 0 sørger for, at du kun får de kolonner, der ikke har andre værdier end null eller 0 .



  1. CREATE DATABASE-forespørgsel ved hjælp af java jdbc og forberedt sætning returnerer syntaksfejl

  2. SQL Server Count er langsom

  3. Hvordan kan jeg ændre root brugernavn i MySQL

  4. Funktion eller procedure for en IN-klausul