sql >> Databasteknik >  >> RDS >> Sqlserver

Hitta kolumner som bara innehåller nollor

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

Tanken bakom detta är att räkna icke null värden och behåll bara de med en räkning på 0 .

COUNT kommer bara att räkna icke-nullvärden.
NULLIF(ColX, 0) kommer att göra alla 0 till null .
Den inre frågan returnerar en rad med fyra kolumner. UNPIVOT kommer att vända det så att du har två kolumner och fyra rader.
Äntligen where U.C = 0 ser till att du bara får de kolumner som inte har några andra värden än null eller 0 .



  1. Veckofördelningsproblem i Rails och Postgresql

  2. Är det möjligt att ändra tabellposter från LibreOffice Base?

  3. Generera en slumpmässig sträng i MySQL

  4. Topp 5 gratis verktyg för databasdesign