我不是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'
但我收到了数千条记录。如果你们中的任何人可以帮助或指出我正确的方向,我会很感激。
感谢。
答案 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'