Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menghitung dalam SQL semua bidang dengan nilai nol dalam satu catatan?

declare @T table
(
  ID int,
  Name varchar(10),
  Age int,
  City varchar(10),
  Zip varchar(10)
)  

insert into @T values 
(1, 'Alex', 32, 'Miami', NULL),
(2,  NULL,  24,  NULL,   NULL)

;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
select ID,
       (
          select *
          from @T as T2
          where T1.ID = T2.ID
          for xml path('row'), elements xsinil, type 
       ).value('count(/row/*[@ns:nil = "true"])', 'int') as NullCount
from @T as T1

Hasil:

ID          NullCount
----------- -----------
1           1
2           3

Pembaruan:

Berikut adalah versi yang lebih baik. Terima kasih kepada Martin Smith .

;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
select ID,
       (
          select T1.*
          for xml path('row'), elements xsinil, type 
       ).value('count(/row/*[@ns:nil = "true"])', 'int') as NullCount
from @T as T1

Pembaruan:

Dan dengan ekspresi XQuery yang sedikit lebih cepat.

;with xmlnamespaces('http://www.w3.org/2001/XMLSchema-instance' as ns)
select ID,
       (
          select T1.*
          for xml path('row'), elements xsinil, type 
       ).value('count(//*/@ns:nil)', 'int') as NullCount
from @T as T1


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara mengatur nilai bool dalam SQL

  2. SQL Server AlwaysOn Availability Groups:Instalasi dan konfigurasi, Bagian 1

  3. SQL menggunakan nilai yang dipisahkan koma dengan klausa IN

  4. Perbandingan Tipe Data Tanggal &Waktu di SQL Server

  5. Bagaimana fungsi konversi SQL bekerja saat mengonversi datetime menjadi float?