Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Znajdź kolumny zawierające tylko zera

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

Wynik:

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

Ideą tego jest liczenie nie null wartości i zachowaj tylko te z liczbą 0 .

LICZBA zlicza tylko wartości inne niż null.
NULLIF(ColX, 0) utworzy wszystkie 0 na null .
Wewnętrzne zapytanie zwraca jeden wiersz z czterema kolumnami. UNPIVOT odwróci to tak, że masz dwie kolumny i cztery wiersze.
Na koniec where U.C = 0 upewnia się, że otrzymujesz tylko kolumny, które nie mają wartości innych niż null lub 0 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jakie są zalety i wady przechowywania SQL w Stored Procs w porównaniu z kodem?

  2. Podstawy SQL Server Instrukcja ALTER TABLE

  3. Dlaczego UPDATE trwa znacznie dłużej niż SELECT?

  4. Ile ograniczeń można nadać kolumnie tabeli w SQL Server

  5. TSQL:Utwórz widok, który ma dostęp do wielu baz danych