在列中查询多个不同的

时间:2013-07-08 01:11:15

标签: .net sql sql-server

我正在尝试在表中的列上编写查询。在“text”列中,我可以具有5或10的值或null。我想得到表中5或10行的行数或null。我写了以下查询它无法正常工作

select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(text) from t_test where text=null 

我可以获得前三个select语句值,但最后一个null返回零,而行中有null。怎么写这个查询?谢谢

2 个答案:

答案 0 :(得分:3)

你应该只使用条件求和:

select count(*),
       sum(case when text = '5' then 1 else 0 end) as Num_5,
       sum(case when text = '10' then 1 else 0 end) as Num_10,
       sum(case when text is null then 1 else 0 end) as Num_Null
from t_test;

这假设一个名为text的字段存储为字符串,因此将常量放在引号中。如果它真的是一个数字,首先我会好奇为什么它被称为text。在这种情况下,您可以省去单引号。

在您的情况下,最后一个不起作用,因为count(text)计算非空值。但where子句仅保留NULL个值。对于那个,你应该使用count(*)。正确的查询是:

select count(*) from t_test where text is null;

答案 1 :(得分:2)

最终查询所需要的是:

select COUNT(*) from t_test where text is null

注意:

  • COUNT(*)而非COUNT(TEXT)为空,无法呈现值
  • is null而不是=null

您的最后一组查询是:

select COUNT(*) from t_test
select COUNT(text) from t_test where text=5
select COUNT(text) from t_test where text=10
select COUNT(*) from t_test where text is null