22

A、、、と言う3つの列がBありCます。NULL各列の値を数える必要があります。

例えば:

 A  | B  | C
-------------
1   |NULL| 1
1   | 1  | NULL
NULL| 1  | 1
NULL|NULL| 1

出力する必要があります:

 A  |  B  |  C
---------------
 2  |  2  |  1

カウント、合計、サブクエリを試しましたが、まだ何も機能していません。任意の入力をいただければ幸いです。

4

6 に答える 6

34
SELECT COUNT(*)-COUNT(A) As A, COUNT(*)-COUNT(B) As B, COUNT(*)-COUNT(C) As C
FROM YourTable; 
于 2013-05-13T18:30:45.257 に答える
9

SQL SERVER の場合、以下を使用できます。

SET NOCOUNT ON
DECLARE @Schema NVARCHAR(100) = '<Your Schema>'
DECLARE @Table NVARCHAR(100) = '<Your Table>'
DECLARE @sql NVARCHAR(MAX) =''
IF OBJECT_ID ('tempdb..#Nulls') IS NOT NULL DROP TABLE #Nulls

CREATE TABLE #Nulls (TableName sysname, ColumnName sysname , ColumnPosition int ,NullCount int , NonNullCount int)

 SELECT @sql += 'SELECT  '''+TABLE_NAME+''' AS TableName , '''+COLUMN_NAME+''' AS ColumnName,  '''+CONVERT(VARCHAR(5),ORDINAL_POSITION)+''' AS ColumnPosition, SUM(CASE WHEN '+COLUMN_NAME+' IS NULL THEN 1 ELSE 0 END) CountNulls , COUNT(' +COLUMN_NAME+') CountnonNulls FROM '+QUOTENAME(TABLE_SCHEMA)+'.'+QUOTENAME(TABLE_NAME)+';'+ CHAR(10)
 FROM INFORMATION_SCHEMA.COLUMNS
 WHERE TABLE_SCHEMA = @Schema
 AND TABLE_NAME = @Table

 INSERT INTO #Nulls 
 EXEC sp_executesql @sql

 SELECT * 
 FROM #Nulls

 DROP TABLE #Nulls

テーブルの各列に Null 値と非 null 値の数を含む結果セットを受け取ります

于 2016-05-24T07:03:48.867 に答える
7

CASE式で集計関数を使用できます。

select 
  sum(case when a is null then 1 else 0 end) A,
  sum(case when b is null then 1 else 0 end) B,
  sum(case when c is null then 1 else 0 end) C
from yt

デモを見る

于 2013-05-13T18:29:37.547 に答える
1
select
    sum(case when a is null then 1 else 0 end) as a_null_count,
    sum(case when b is null then 1 else 0 end) as b_null_count,
    sum(case when c is null then 1 else 0 end) as c_null_count
from table
于 2013-05-13T18:30:18.490 に答える