Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何计算具有空值的特定列的不同行数是所有行_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 如何计算具有空值的特定列的不同行数是所有行

Sql 如何计算具有空值的特定列的不同行数是所有行,sql,sql-server,tsql,Sql,Sql Server,Tsql,我的表代码结果如下: 在这里,我们可以注意到代码123单独有一个代码2,它在结果中有一个值。我想对结果中完全没有值的不同代码进行计数。这意味着,在这个例子中,我应该得到2 我不想使用GROUPBY子句,因为它会减慢查询速度 下面的代码给出了错误的结果: 从CodeResult中选择计数(不同代码),其中结果为Null一种方法是两级聚合: select count(*) from (select code from t group by code having

我的表代码结果如下:

在这里,我们可以注意到代码123单独有一个代码2,它在结果中有一个值。我想对结果中完全没有值的不同代码进行计数。这意味着,在这个例子中,我应该得到2

我不想使用GROUPBY子句,因为它会减慢查询速度

下面的代码给出了错误的结果:
从CodeResult中选择计数(不同代码),其中结果为Null

一种方法是两级聚合:

select count(*)
from (select code
      from t
      group by code
      having max(result) is null
     ) c;
更聪明的方法不使用子查询。它统计不同代码的数量,然后删除产生结果的代码:

select ( count(distinct code) -
         count(distinct case when result is not null then code end )
       )
from t;

一种方法是两级聚合:

select count(*)
from (select code
      from t
      group by code
      having max(result) is null
     ) c;
更聪明的方法不使用子查询。它统计不同代码的数量,然后删除产生结果的代码:

select ( count(distinct code) -
         count(distinct case when result is not null then code end )
       )
from t;

在我所知道的所有DBMS中,您无法通过以下方式避开组:

从选项卡中选择不同的a、b、c,

与以下各项相同:


按a、b、c从选项卡组中选择a、b、c

在我所知道的所有DBMS中,您从以下数据库获得的查询计划无法避免分组:

从选项卡中选择不同的a、b、c,

与以下各项相同:


按a、b、c从选项卡组中选择a、b、c

以下查询将返回每个
code
值,这些值在
codesult
中没有对应的非空值:

select distinct Code
  from CodeResult as CR
  where not exists
    ( select 42 from CodeResult as iCR where iCR.Code = CR.Code and iCR.CodeResult is not NULL );

计算行数留给读者作为练习。

以下查询将返回每个
code
值,这些值在
codesult
中没有对应的非空值:

select distinct Code
  from CodeResult as CR
  where not exists
    ( select 42 from CodeResult as iCR where iCR.Code = CR.Code and iCR.CodeResult is not NULL );

计算行数留给读者作为练习。

这里的大多数人希望样本表数据和预期结果是格式化文本,而不是图像。请阅读一些改进问题的提示。提示:性能问题得益于包含实际执行计划。有关在问题中包含执行计划的方法,请参阅。这里的大多数人希望示例表数据和预期结果以格式化文本而不是图像的形式出现。请阅读以获取有关改进问题的一些提示。提示:性能问题受益于包含实际执行计划。请参阅,了解如何在问题中包含执行计划。