我有这个查询
SELECT Ets_Se_Categorie AS Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
GROUP BY Ets_Se_Categorie
它给了我下面的表/结果
Ets_Se_Categorie cpte
(Seems to be empty string) 5531
Old place 8
Secondary 1066
Principal 4713
Subsidiary 7985
First 9
headquarter 31610
Main Headquarter 1587
(Seems to be empty string)
表示它是一个空字段
目的是拥有这个
Ets_Se_Categorie cpte
Old place 8
Secondary 1066
Principal 4713
Subsidiary 7985
First 9
headquarter 31610
Main Headquarter 1587
我已创建此查询
SELECT *
FROM
(
SELECT Ets_Se_Categorie AS Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
GROUP BY Ets_Se_Categorie
) AS A
WHERE (A.Ets_Se_Categorie IS NOT NULL OR A.Ets_Se_Categorie != '')
问题没有改变......
为什么我使用嵌套查询?
我试过这个,第一次
SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
WHERE (Ets_Se_Categorie IS NOT NULL OR Ets_Se_Categorie != '')
GROUP BY Ets_Se_Categorie
什么都没发生......
任何见解都将不胜感激。可能很简单,但我对其原因感到困惑。
谢谢!
答案 0 :(得分:3)
您使用OR
代替AND
,这应该有效:
WHERE (A.Ets_Se_Categorie IS NOT NULL AND A.Ets_Se_Categorie != '')
由于对于OR
无法正常工作的原因感到困惑:
这两个条件必须为true
才能返回记录。所有记录都是NOT NULL
或!= ''
。考虑一个空字符串的记录,该记录为NOT NULL
,因此返回。
为什么你没有看到NULL
记录:
NULL
不是有效值,表示 undefined 。所以没有任何东西与NULL
相等或不相等。 NULL = NULL
和Anything != NULL
都不是true
。您必须使用IS (NOT) NULL
。
在原始查询中,您已过滤掉NULL
值:
SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
WHERE (Ets_Se_Categorie IS NOT NULL OR Ets_Se_Categorie != '')
GROUP BY Ets_Se_Categorie
因为NULL
既不是NOT NULL
也不是!= ''
(请记住上一节)。
结论:使用IS NOT NULL AND != ''
或ISNULL(Column, '') != ''
或COALESCE(Column, '') != ''
这是ANSI sql(适用于所有数据库)。
答案 1 :(得分:2)
您只需使用ISNULL即可。像这样:
WHERE ISNULL(A.Ets_Se_Categorie, '') != ''
答案 2 :(得分:1)
您是否尝试LTRIM, RTRIM
删除空格
SELECT
LTRIM(RTRIM(Ets_Se_Categorie))
,COUNT(LTRIM(RTRIM(Ets_Se_Categorie))) AS cpte
FROM TableV_MyTest
WHERE
(Ets_Se_Categorie IS NOT NULL AND LTRIM(RTRIM(Ets_Se_Categorie)) != '')
GROUP BY
LTRIM(RTRIM(Ets_Se_Categorie))
答案 3 :(得分:1)
尝试检查列中的空格。
monthly at midnight: `0 0 0 1 * *`
monthly at 1 am: `0 0 1 1 * *`
weekly, on sunday at midnight: `0 0 0 * * SUN`
答案 4 :(得分:1)
你需要在这里使用AND。它仍然返回,因为它看起来并且看到该列不是NULL并返回它。这是OR的工作方式,如果第一个子句为真则返回。
SELECT Ets_Se_Categorie,COUNT(Ets_Se_Categorie) AS cpte
FROM TableV_MyTest
WHERE (Ets_Se_Categorie IS NOT NULL AND Ets_Se_Categorie != '')
GROUP BY Ets_Se_Categorie