2011-11-23 65 views
2

我不知道這是可能的,或者如果它是如何做到這一點 -SQL計數空字段

我有一個數據庫中的以下數據 -

id  | improve | timeframe | criteria | impact 
-------+------------+-------------+-----------+--------- 
1  |   | Test  | Test | Test 
2  | Test |    | Test | 
3  |   | Test  |   |  
-------+------------+-------------+-----------+--------- 

忽略id列,如何使用SQL查詢確定剩餘12個非空的字段數?

我已經開始用 -

SELECT improve, timeframe, impact, criteria 
FROM data 
WHERE improve IS NOT NULL 
    AND timeframe IS NOT NULL 
    AND impact IS NOT NULL 
    AND criteria IS NOT NULL; 

這隻返回的行數,即。 3.

任何想法?

謝謝。

+0

只是要清楚,你想獲得的所有非空字段的總和。所以,'count(改進)哪裏改進不是null +計數(時間框架)哪裏時間幀不爲空,等等,對嗎? – abhinav

+0

是的沒錯,我需要所有非空字段的總和,對不起,如果不明確。 – Tom

+0

如何知道單列中的空行?謝謝 –

回答

6
SELECT count(improve) + count(timeframe) + count(impact) + count(criteria) FROM data 
+0

目前這返回所有字段,我在哪裏檢索所有非空字段的總和錯誤? – Tom

+2

@Tom,你試過這個查詢嗎?此外,你需要澄清你的意思是「非空」。在你的問題中,你談到了「非空」,這是除了Oracle以外的大多數數據庫的差異。該查詢計算所有不爲空的字段。 – Cito

+0

我正在使用phpmyadmin並將字段設置爲Varchar默認NULL,但它仍顯示所有字段的總和,無論它們是否爲null。這聽起來正確嗎? – Tom

2

像這樣的東西可以讓你在正確的方向前進

SELECT 
SUM(CASE WHEN improve IS NULL THEN 0 ELSE 1 END + 
CASE WHEN timeframe IS NULL THEN 0 ELSE 1 END + 
CASE WHEN criteria IS NULL THEN 0 ELSE 1 END + 
CASE WHEN impact IS NULL THEN 0 ELSE 1 END) 
from 
data 
-2
SELECT Sum(case when improve is null then 0 else 1 end + 
case when timeframe is null then 0 else 1 end + 
case when impact is null then 0 else 1 end + 
case when criteria is null then 0 else 1 end) 
FROM data 
group by improve, timeframe, impact, criteria 
+1

你應該查看'COUNT'函數 –

0

如果您使用的SQL Server,使用DATALENGTH()。

SELECT improve, timeframe, impact, criteria 
FROM data 
WHERE DATALENGTH(improve) > 0 
AND DATALENGTH(timeframe) > 0 
AND DATALENGTH(impact) > 0 
AND DATALENGTH(criteria) >0; 

DATALENGTH以字節爲單位返回字符串的長度,包括尾隨空格。這聽起來好像你沒有空白字段,所以DATALENGTH完成這項工作。否則,你也可以使用LEN()來修剪任何尾隨空格。

如果您使用的是MySQL,,您可以使用CHARACTER_LENGTH,它刪除尾隨空白處,然後給出您想要檢查的字段的字符數。

0

嘗試下面的代碼

SELECT id, COUNT(improve) + COUNT(timeframe) + COUNT(impact) + COUNT(criteria) FROM data GROUP BY id;