2013-03-20 37 views
-1

我不是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' 

,但我得到几千条记录。如果你们中的任何一个人能够帮助或指引我朝着正确的方向,我会感激。

谢谢。

+1

什么是 “空” 是什么意思?空值?空串?还有别的吗? – 2013-03-20 20:14:45

+2

并具有比或更高的优先级。你的'WHERE'等价于'LEN(col2)> 1或LEN(col3)> 1 OR(LEN(col4)> 1 AND col1 ='1')' – 2013-03-20 20:15:05

+0

我很抱歉,但你对NULL,EMPTY menas不同事情,可以说,这个专栏没有字符。 – RicEspn 2013-03-20 20:17:15

回答

2

检查运算符优先级在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还是零?

+0

Kenvro,那工作!,我正在打破我的头如何做到这一点,谢谢。还要感谢所有发布答案的人,下次我会试着对我的问题做更具体的说明。 – RicEspn 2013-03-20 20:52:51

+0

在这种情况下,这可能不是问题,但应该意识到LEN不计算尾随空格。所以,LEN('')= 0。如果你不想考虑只有空格的列是“空的”,这对你来说只是一个问题。 – GilM 2013-03-20 22:42:33

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' 
+0

Lighthart,感谢您的回答,我已经尝试过,如果我使用IS NULL不工作,因为是一个空字符串值。感谢您的帮助。 – RicEspn 2013-03-20 20:41:20

+0

查看GilM的回答。 – Lighthart 2013-03-20 20:53:44

1

也许你想:

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