sql >> データベース >  >> RDS >> Sqlserver

1つのレコードにnull値を持つすべてのフィールドをSQLでカウントするにはどうすればよいですか?

    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
    

    結果:

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

    更新:

    これがより良いバージョンです。 MartinSmith に感​​謝します 。

    ;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
    

    更新:

    そして、少し高速なXQuery式を使用します。

    ;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. Accessでパラメータクエリを作成する方法

    2. php/MySQL-アイテムのヘッダーを1つだけ表示する

    3. カウント付きの個別のレコードを取得する

    4. ロールバックスクリプトオラクルの自動化