sql >> Database >  >> RDS >> Sqlserver

Kolommen zoeken die alleen nullen bevatten

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

Resultaat:

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

Het idee hierachter is om de niet null . te tellen waarden en bewaar alleen die met een telling van 0 .

COUNT telt alleen niet-null-waarden.
NULLIF(ColX, 0) maakt alle 0 in null .
De innerlijke query retourneert één rij met vier kolommen. UNPIVOT zal het omdraaien zodat je twee kolommen en vier rijen hebt.
Eindelijk where U.C = 0 zorgt ervoor dat u alleen de kolommen krijgt die geen andere waarden hebben dan null of 0 .



  1. Eigenaardige verwerking van tijdzones in een Postgres-database

  2. Een berekende kolom toevoegen aan een bestaande tabel in SQL Server

  3. PHP:vind ik leuk/niet leuk teller

  4. Postgres-fout:null-waarde in kolom-ID - tijdens invoegbewerking