我不是 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'
但我得到了数千条记录。如果你们中的任何人可以帮助或指出我正确的方向,我将不胜感激。
谢谢。
我不是 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'
但我得到了数千条记录。如果你们中的任何人可以帮助或指出我正确的方向,我将不胜感激。
谢谢。
只需添加更多 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'
在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 还是零?
也许你想要:
SELECT COUNT(col1)
FROM table
WHERE
( COALESCE(col2,'')=''
OR COALESCE(col3,'')=''
OR COALESCE(col4,'')=''
)
AND col1='1'