我想获得一个COUNT
,其中某列应该至少有一个值。如果此列包含EMPTY
或NULL
值,则不应包含在COUNT
中。问题是,我尝试了很多不同的SQL函数(例如:IS NOT NULL
,<>
,LTRIM
,RTRIM
等等...但是行和#39; t值仍包含在计数中。
例如;在数据库中,我有一个名为MYDESCRIPTION
的列。表中有四条记录。其中两个在MYDESCRIPTION
列中有一个值,其中两个没有。当我为那些有价值的人寻找计数时,其他两个没有价值的人仍然包含在结果中。所以它仍然显示四个。
以下是特定日期内的一些示例查询:
SELECT COUNT(*)
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
DATE (CREATIONDATE) <= '2014-12-01' AND
MYDESCRIPTION <> ''
和
SELECT COUNT(*)
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
DATE (CREATIONDATE) <= '2014-12-01' AND
MYDESCRIPTION IS NOT NULL
这两个简单的查询只是我尝试过的一些。我想这个查询仍在计算没有值的列,因为它似乎有一个值。
答案 0 :(得分:1)
您的WHERE子句应该看起来很像:
WHERE DATE (CREATIONDATE) = '2014-12-01'
AND MYDESCRIPTION IS NOT NULL
AND MYDESCRIPTION <> ''
答案 1 :(得分:1)
SELECT COUNT(*) FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01'
AND DATE (CREATIONDATE) <= '2014-12-01'
AND (MYDESCRIPTION IS NOT NULL and MYDESCRIPTION <> '')
答案 2 :(得分:0)
您可以在这种情况下使用SUM(CASE ...)。根据DBMS的需要调整语法。
SELECT
SUM(CASE WHEN LENGTH(MYDESCRIPTION) = 0 THEN 0 ELSE 1) END) AS "Non-Nulls"
FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01' AND
DATE (CREATIONDATE) <= '2014-12-01' AND
MYDESCRIPTION IS NOT NULL
答案 3 :(得分:0)
试试这个:
SELECT COUNT (*)
FROM
(SELECT * FROM TABLE
WHERE 1=1
AND (CAST (CREATIONDATE AS DATE) BETWEEN CAST('2014-12-01' AS DATE) AND CAST('2014-12-01' AS DATE) )
AND (MYDESCRIPTION IS NOT NULL AND LENGTH(TRIM(MYDESCRIPTION)) > 0 )
)
答案 4 :(得分:0)
SELECT COUNT(*) FROM TABLE
WHERE DATE (CREATIONDATE) >= '2014-12-01'
AND DATE (CREATIONDATE) <= '2014-12-01'
AND (MYDESCRIPTION IS NOT NULL and RTRIM(MYDESCRIPTION) <> '')
IS NOT NULL
与<> ''
的条件不同。
IS NOT NULL
表示该值未知。
<> ''
表示该值不等于ZLS或零长度字符串。
在添加RTRIM
时,我正在消除CHAR
或NCHAR
字段等于一堆空格的可能性,这可能是也可能不是这个OP& #39;的问题。