sql >> Databáze >  >> RDS >> Sqlserver

Najděte sloupce, které obsahují pouze nuly

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

Výsledek:

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

Smyslem toho je počítat non null hodnoty a ponechat pouze ty s počtem 0 .

POČET bude počítat pouze nenulové hodnoty.
NULLIF(ColX, 0) udělá vše 0 do null .
Vnitřní dotaz vrací jeden řádek se čtyřmi sloupci. UNPIVOT obrátí to, takže budete mít dva sloupce a čtyři řádky.
Konečně where U.C = 0 zajišťuje, že získáte pouze sloupce, které nemají jiné hodnoty než null nebo 0 .



  1. Sloupec tabulky Mysql nemůže být null

  2. Jak získat počet státu a města země pomocí SQL dotazu z databáze?

  3. mysql regexp vrací boolean spíše než hodnotu

  4. Jak mohu převést jméno na id