如何计算3列中空值的记录

时间:2013-03-20 20:13:40

标签: sql-server-2008 tsql

我不是SQL Server 2008专家,但这正是我想要实现的目标。假设我有这张表:

我想计算col2, col3中没有值的记录,col4 col1=1,我试过这个:

SELECT COUNT(col1) 
FROM table 
WHERE 
    LEN(col2) > 1 OR LEN(col3) > 1 OR LEN(col4) > 1 AND col1 = '1'

但我收到了数千条记录。如果你们中的任何人可以帮助或指出我正确的方向,我会很感激。

感谢。

3 个答案:

答案 0 :(得分:2)

只需添加更多WHERE条件

SELECT COUNT(col1) 
FROM   table 
WHERE  col2 IS NULL
  AND  col3 IS NULL 
  AND  col4 IS NULL 
  AND  col1='1'

此外,您的示例语言与我们的示例代码相矛盾。你可能想要:

SELECT COUNT(col1) 
FROM   table 
WHERE  
  (    col2 IS NULL
  OR   col3 IS NULL 
  OR   col4 IS NULL 
  )
  AND  col1='1'

答案 1 :(得分:2)

检查http://msdn.microsoft.com/en-us/library/ms190276.aspx

处的运算符优先级

'AND'在'OR'之前得到评估,因此您的示例如下所示:

SELECT COUNT(col1) 
FROM table 
WHERE 
    LEN(col2) > 1 OR LEN(col3) > 1 OR ( LEN(col4) > 1 AND col1 = '1' )

这是一个非常开放的选择。你说:

  

我想计算没有值的记录

但是你的代码正在计算具有值的记录。所以也许你想要这个:

SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
(  col2 IS NULL
OR col3 IS NULL
OR col4 IS NULL
)

当您说:

时,您可以显示具有值的数据

在哪里(col2)> 0

但是如果col2为NULL,那么LEN(col2)也是NULL。不是零。

如果你的字符串是''而不是NULL,那么你可以查看LENgth:

SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
(  LEN(col2) = 0
OR LEN(col3) = 0
OR LEN(col4) = 0
)

当然,如果你确实打算看到非空的值:

SELECT COUNT(col1)
FROM table
WHERE col1 = '1' AND
(  LEN(col2) > 0
OR LEN(col3) > 0
OR LEN(col4) > 0
)

同样在你的例子中,你说LEN()是>你的意思是大于1还是零?

答案 2 :(得分:1)

也许你想要:

SELECT COUNT(col1) 
FROM   table 
WHERE  
  (    COALESCE(col2,'')=''
  OR   COALESCE(col3,'')=''
  OR   COALESCE(col4,'')=''
  )
  AND  col1='1'