2013-03-20 39 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'