【问题标题】:Count the number columns using NOT NULL in a case statement在 case 语句中使用 NOT NULL 计算列数
【发布时间】:2018-01-29 19:53:07
【问题描述】:

我的查询需要一些帮助...我正在尝试计算每个房子的名字,所有 col# 都是名字。

查询:

SELECT 
    House#, 
    COUNT(CASE WHEN col#1 IS NOT NULL THEN 1 ELSE 0 END) +
    COUNT(CASE WHEN col#2 IS NOT NULL THEN 1 ELSE 0 END) +
    COUNT(CASE WHEN col#3 IS NOT NULL THEN 1 ELSE 0 END) AS count
FROM 
    myDB 
WHERE 
    House# IN (house#1, house#2, house#3) 
GROUP BY 
    House#

期望的结果:

house 1 - the count is 3
house 2 - the count is 2
house 3 - the count is 1

...根据我当前的查询,count 的结果将只有 3 个

【问题讨论】:

  • 使用sum 而不是count
  • 请张贴 DDL,DML 所涉及的表格,不要张贴图片。拥有此信息有助于其他人快速重现您的问题并更好地解决问题。以下是一些可能有助于您理解的示例。 --样本数据 create table t1 ( id int ) insert into t1 values (1), (2), (1) 我当前的查询/我尝试过的内容: select id,count(*) as cnt from t1 group by id 我当前的结果: id cnt 1 2 2 1 我的预期结果: id cnt 1 2 2 1 1 2
  • NULL 不包含在 COUNT 中。只需松开 CASE 表达式,您应该会很好。
  • 我使用空值的原因是每个房子都有多个 col#,每个 col# 可以有一个名字......或者没有。有些房子可以有多个不同的名称,我正在寻找不同名称在房子中出现的次数,所以我使用 null 来创建一个计数器......希望有助于澄清我的问题。

标签: sql-server tsql


【解决方案1】:

COUNT 按设计不计算 NULL 值。

SELECT House#, 
       COUNT(col1#) + COUNT(col2#) + COUNT(col3#) AS count
FROM myDB 
WHERE House# IN (house#1,house#2,house#3) 
GROUP BY House#;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-25
    • 2022-06-22
    • 1970-01-01
    • 2017-07-26
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多