Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Намерете колони, които съдържат само нули

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

Резултат:

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

Идеята зад това е да се преброят не null стойности и запазвайте само тези с брой 0 .

БРОЙ ще отчита само ненулеви стойности.
NULLIF(ColX, 0) ще направи всичко 0 в null .
Вътрешната заявка връща един ред с четири колони. UNPIVOT ще го обърне, така че да имате две колони и четири реда.
Накрая where U.C = 0 гарантира, че получавате само колоните, които нямат стойности, различни от null или 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. Как да актуализирате стойността на всички xml атрибути в xml променлива с помощта на t-sql?

  2. Групово вмъкване на общ списък C# в SQL Server

  3. Отстраняване на неизправности при блокиране в Sql Server 2008

  4. SQL Server 2008 Spatial:намерете точка в многоъгълник

  5. Актуализирайте един ред с t-sql