首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >对SQL中行中的空列进行计数

对SQL中行中的空列进行计数
EN

Stack Overflow用户
提问于 2011-12-22 05:18:22
回答 11查看 42K关注 0票数 28

我想知道在SQL中计算行的空列的可能性,我有一个表Customer,它有一个可以为空值的值,简单地说,我想要一个查询返回某个行(某个客户)的null列数的整数。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-12-22 05:21:19

此方法为空列分配1或0,并将它们全部相加。希望您在这里没有太多可以为空的列……

代码语言:javascript
复制
SELECT 
  ((CASE WHEN col1 IS NULL THEN 1 ELSE 0 END)
  + (CASE WHEN col2 IS NULL THEN 1 ELSE 0 END)
  + (CASE WHEN col3 IS NULL THEN 1 ELSE 0 END)
  ...
  ...
  + (CASE WHEN col10 IS NULL THEN 1 ELSE 0 END)) AS sum_of_nulls
FROM table
WHERE Customer=some_cust_id

请注意,如果您的关系型数据库管理系统支持IF(),您也可以使用它在语法上更清晰地实现这一点。

代码语言:javascript
复制
SELECT 
  (IF(col1 IS NULL, 1, 0)
  + IF(col2 IS NULL, 1, 0)
  + IF(col3 IS NULL, 1, 0)
  ...
  ...
  + IF(col10 IS NULL, 1, 0)) AS sum_of_nulls
FROM table
WHERE Customer=some_cust_id

我在一个表格上测试了这个模式,它看起来工作正常。

票数 42
EN

Stack Overflow用户

发布于 2011-12-22 05:32:11

不幸的是,在标准的SQL语句中,您必须输入要测试的每一列,要以编程方式测试所有列,您可以使用T-SQL。但需要提醒的是,请确保您使用的是真正的NULL,您可以拥有数据库不会识别为真正的NULL的空白存储值(我知道这听起来很奇怪)。

您可以通过在如下语句中捕获空值和NULLS来避免这种情况:

代码语言:javascript
复制
CASE WHEN col1 & '' = '' THEN 1 ELSE 0 END

或者在一些数据库中,如Oracle (不确定是否有其他数据库),您将使用:

代码语言:javascript
复制
CASE WHEN col1 || '' = '' THEN 1 ELSE 0 END
票数 0
EN

Stack Overflow用户

发布于 2011-12-22 05:34:28

您不需要声明RDBMS。对于SQL Server 2008...

代码语言:javascript
复制
SELECT CustomerId,
       (SELECT COUNT(*) - COUNT(C)
        FROM   (VALUES(CAST(Col1 AS SQL_VARIANT)),
                      (Col2),
                      /*....*/
                      (Col9),
                      (Col10)) T(C)) AS NumberOfNulls
FROM   Customer  
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8596500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档