如何计算3个列中空值的记录
问题描述:
我不是SQL Server 2008专家,但这是我正在努力完成的。比方说,我有这个表:如何计算3个列中空值的记录
我想算没有在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'
,但我得到几千条记录。如果你们中的任何一个人能够帮助或指引我朝着正确的方向,我会感激。
谢谢。
答
检查运算符优先级在http://msdn.microsoft.com/en-us/library/ms190276.aspx
“和”前被评估“或”所以你的例子是这样的:
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
)
您可以显示数据时,你说有值:
WHERE LEN(COL2)> 0
但如果COL2是NULL,那么LEN(COL2) IS 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还是零?
答
只需添加更多的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'
答
也许你想:
SELECT COUNT(col1)
FROM table
WHERE
( COALESCE(col2,'')=''
OR COALESCE(col3,'')=''
OR COALESCE(col4,'')=''
)
AND col1='1'
什么是 “空” 是什么意思?空值?空串?还有别的吗? – 2013-03-20 20:14:45
并具有比或更高的优先级。你的'WHERE'等价于'LEN(col2)> 1或LEN(col3)> 1 OR(LEN(col4)> 1 AND col1 ='1')' – 2013-03-20 20:15:05
我很抱歉,但你对NULL,EMPTY menas不同事情,可以说,这个专栏没有字符。 – RicEspn 2013-03-20 20:17:15