SQL Count空字段

时间:2011-11-23 19:10:37

标签: sql select null

我不确定这是否可能,或者是否可行,如何做到 -

我在数据库中有以下数据 -

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。

有什么想法吗?

感谢。

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:3)

这样的事情可能会让你朝着正确的方向前进

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 :(得分:0)

SELECT id,COUNT(改进)+ COUNT(时间范围)+ COUNT(影响)+ COUNT(条件)FROM数据GROUP BY id;

答案 3 :(得分:-1)

如果您使用的是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,它会删除尾随空格,然后为您提供要检查的字段的字符数。

答案 4 :(得分:-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