Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取每行为null或为空的列的计数_Sql_Sql Server - Fatal编程技术网

Sql 获取每行为null或为空的列的计数

Sql 获取每行为null或为空的列的计数,sql,sql-server,Sql,Sql Server,如何按行检查所有列是否为空 我需要列的总计数为空或为空。请参考以下图片以帮助您 因此,我希望StudentId=3的行的count=4,因为该行中有四列为空 谢谢。您需要为每一列添加案例: CASE WHEN col1 IS NULL THEN 1 ELSE 0 END + CASE WHEN col2 IS NULL THEN 1 ELSE 0 END + ... 编辑: 如果确实需要检查空字符串,可以使用 CASE WHEN col1 <> '' THEN 0 ELSE 1

如何按行检查所有列是否为空

我需要列的总计数为空或为空。请参考以下图片以帮助您

因此,我希望StudentId=3的行的count=
4
,因为该行中有四列为空


谢谢。

您需要为每一列添加案例:

CASE WHEN col1 IS NULL THEN 1 ELSE 0 END +
CASE WHEN col2 IS NULL THEN 1 ELSE 0 END +
...
编辑:

如果确实需要检查空字符串,可以使用

CASE WHEN col1 <> '' THEN 0 ELSE 1 END
当col1“”然后0 ELSE 1结束时的情况
col1''
对于空字符串和空字符串都不是TRUE

SELECT (if(col1 is null,1,0) + if(col2 is null,1,0) + if(col3 is null,1,0) + if(col4 is null,1,0) + if(col5 is null,1,0) if(col6 is null,1,0) if(col7 is null,1,0)) from yourTable

问候。

这可能不是最好的方法,但它很有效。我创建了一个表变量来测试它,您应该在您的案例中采用以下逻辑:

DECLARE @tbl TABLE (f1 VARCHAR(10),f2 VARCHAR(10),f3 VARCHAR(10))
INSERT INTO @tbl values(NULL,NULL,'fdgfdhfgh')

SELECT *,( CASE WHEN f1 IS NULL THEN 1 ELSE 0 END + CASE WHEN f2 IS NULL then       1 ELSE 0 END + CASE WHEN f3 IS NULL THEN 1 ELSE 0 END ) Nulls FROM @tbl

在不硬编码列名的情况下,此动态查询仅将表名传递给参数
@TableName

我从
sys.columns
表中选择列,并使用操作逻辑


请使用下面的代码。在SQL server 2012中工作正常:

DECLARE @table_A TABLE 
(StudentId int IDENTITY(1,1) , FirstName Varchar(50),LastName Varchar(50),
PhoneNumber Varchar(50),Email Varchar(50),ResidencyAddress Varchar(50),
CountyId int, CityId int)

INSERT @table_A
(
    --StudentId - this column value is auto-generated
    FirstName,LastName,PhoneNumber,Email,ResidencyAddress,CountyId,CityId
)
VALUES
('John','D','6052314788','john.d@gmail.com',NULL,0, 1),
(NULL,NULL,NULL,NULL,NULL,NULL,NULL),
('Albert',NULL,'6058745962',NULL,NULL,0, 2),
('Mike','K',NULL,'mike@gmail.com',NULL,NULL, NULL)

SELECT 
    StudentId,
    CASE WHEN FirstName IS NULL THEN 1 ELSE 0 END +
    CASE WHEN LastName IS NULL THEN 1 ELSE 0 END +
    CASE WHEN PhoneNumber IS NULL THEN 1 ELSE 0 END +
    CASE WHEN Email IS NULL THEN 1 ELSE 0 END +
    CASE WHEN ResidencyAddress IS NULL THEN 1 ELSE 0 END +
    CASE WHEN CountyId IS NULL THEN 1 ELSE 0 END +
    CASE WHEN CityId IS NULL THEN 1 ELSE 0 END AS [Count of Nulls]
FROM @table_A A

添加示例表数据,并获得预期结果@请参考上面的链接。这是表格数据,还是当前结果,还是想要的结果?(还有,文本比图像好。)@jarlh我想要4个计数,因为四列为空。你有没有尝试过
当Col1为空时的CASE,然后1 ELSE 0 END+当Col2为空时的CASE,然后1 ELSE 0 END+当Col3为空时的CASE,然后1 ELSE 0 END
?回答得好,一点很清楚,OP要求为空或空,所以为空(Col1,,)=''然后1或者0 END+可能会更好。@OldBoyCoder:在评论中,OP只谈到空值,但我要补充一点,虽然不是100%清楚,但他的问题的第一行是空值或空值,我对你的答案投了更高的票,因为这让他走上了正确的方向。
DECLARE @table_A TABLE 
(StudentId int IDENTITY(1,1) , FirstName Varchar(50),LastName Varchar(50),
PhoneNumber Varchar(50),Email Varchar(50),ResidencyAddress Varchar(50),
CountyId int, CityId int)

INSERT @table_A
(
    --StudentId - this column value is auto-generated
    FirstName,LastName,PhoneNumber,Email,ResidencyAddress,CountyId,CityId
)
VALUES
('John','D','6052314788','john.d@gmail.com',NULL,0, 1),
(NULL,NULL,NULL,NULL,NULL,NULL,NULL),
('Albert',NULL,'6058745962',NULL,NULL,0, 2),
('Mike','K',NULL,'mike@gmail.com',NULL,NULL, NULL)

SELECT 
    StudentId,
    CASE WHEN FirstName IS NULL THEN 1 ELSE 0 END +
    CASE WHEN LastName IS NULL THEN 1 ELSE 0 END +
    CASE WHEN PhoneNumber IS NULL THEN 1 ELSE 0 END +
    CASE WHEN Email IS NULL THEN 1 ELSE 0 END +
    CASE WHEN ResidencyAddress IS NULL THEN 1 ELSE 0 END +
    CASE WHEN CountyId IS NULL THEN 1 ELSE 0 END +
    CASE WHEN CityId IS NULL THEN 1 ELSE 0 END AS [Count of Nulls]
FROM @table_A A