Sql 获取每行为null或为空的列的计数
如何按行检查所有列是否为空 我需要列的总计数为空或为空。请参考以下图片以帮助您 因此,我希望StudentId=3的行的count=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
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