-1

我不是 SQL Server 2008 专家,但这是我想要完成的。假设我有这张桌子:

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

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

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

谢谢。

4

3 回答 3

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'
于 2013-03-20T20:15:08.163 回答
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
)

当您说:

其中 LEN(col2) > 0

但如果 col2 为 NULL,则 LEN(col2) 也为 NULL。不为零。

如果您的字符串是 '' 而不是 NULL,那么您可以检查长度:

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。您的意思是大于 1 还是零?

于 2013-03-20T20:43:13.423 回答
1

也许你想要:

SELECT COUNT(col1) 
FROM   table 
WHERE  
  (    COALESCE(col2,'')=''
  OR   COALESCE(col3,'')=''
  OR   COALESCE(col4,'')=''
  )
  AND  col1='1'
于 2013-03-20T20:48:34.997 回答