【问题标题】:How to replace null into 0 in a complex query如何在复杂查询中将 null 替换为 0
【发布时间】:2011-06-04 00:53:31
【问题描述】:

当总值为空时,我想将总值替换为0

这是查询:

SELECT DISTINCT(location),  (
    SELECT  Count(a.location) as total
    FROM table_fo a   
    LEFT JOIN  table_info b ON a.TRADEID = b.TRADEID AND   a.asofdate = b.asofdate
    WHERE (b.TERMSTATUS <> 'TRAN' OR b.TERMSTATUS is NULL)  AND b.asofdate = '20110105' AND a.location = pfo.location
 GROUP BY a.LOCATION  
)   AS total   
FROM table_fo  pfo
WHERE asofdate = '20110105';

【问题讨论】:

  • 您可以使用 ISNULL 函数。 ISNULL(列名, 0)
  • 首先告诉我们您使用的是什么数据库模型。其次,我认为您的查询无效。子选择应该只返回一个值,但这只会在您有一个位置时发生。第三,我认为 Count 永远不会返回 NULL(至少对于 MySQL 它没有)。
  • @dparker - 您应该将其发布为答案。这将是我的答案,但我感觉不对,看看你是如何打败我的。

标签: sql null replace


【解决方案1】:

您可以使用 ISNULL 函数。

以下是您将如何使用该函数(用于 SQL Server)。

ISNULL(columnName, 0) 

【讨论】:

  • 你想的函数的名字是IFNULLISNULL 是另外一回事。
  • @Alin - 在 SQL Server 中至少 ISNULL 的行为类似于 coalesce
  • @Martin 嗯...没想到会这样。我补充说它适用于 SQL Server。
  • 谢谢@Alin。在 SQL Server 中,可以对多个列使用合并,就像 @Will 提到的那样,其中 ISNULL 函数只接受两个参数。
  • 我熟悉COALESCE 并了解ISNULL 的作用。让我感到困惑的是,在 MySQL 中有一个 IFNULL 函数与 SQL Server 中的 ISNULL 相同。而ISNULL 是一个运算符,用于检查某事物是否为NULL
【解决方案2】:

我想替换总数 为 null 时为 0

这是不可能的情况,因为:

COUNT 函数总是返回一个整数。结果不能为NULL!

至于将表达式合并到某个默认值以防它为 NULL,所有主要数据库中都有执行此操作的函数(例如:COALESCENVLISNULLIFNULL)。典型的用法是

FUNCTION_NAME(ExpressionThatMayBeNULL, DefaultWhenNull)

有关详细信息,您应该查阅数据库制造商文档(您可以在网上找到)。

【讨论】:

    【解决方案3】:

    COALESCE 将在 PL/SQL (Oracle) 和 T-SQL (SQL Server) 中执行此操作

    语法为COALESCE(field1, field2[, fieldN]) - 它将选择左边的第一列以获得非空值。

    修改你的查询:

    SELECT DISTINCT(location),  COALESCE((
        SELECT  Count(a.location) as total
        FROM table_fo a   
        LEFT JOIN  table_info b ON a.TRADEID = b.TRADEID AND   a.asofdate = b.asofdate
        WHERE (b.TERMSTATUS <> 'TRAN' OR b.TERMSTATUS is NULL)  AND b.asofdate = '20110105' AND a.location = pfo.location
     GROUP BY a.LOCATION  
    ),0)   AS total   
    FROM table_fo  pfo
    WHERE asofdate = '20110105';
    

    【讨论】:

      【解决方案4】:

      正如 dparker 所说,ISNULL(...) 将适用于某些类型的 sql,尽管函数的名称可能因数据库提供商而异。

      IBM DB2 中的函数称为 COALESCE(...),例如在 Oracle SQL 中称为 NVL(...)。

      这可能有用

      http://www.w3schools.com/sql/sql_isnull.asp

      【讨论】:

        【解决方案5】:

        如果您使用的是 SQL Server,以下是可用于将空值替换为任何用户定义的替代值的 3 种方法。 1.ISNULL 2. 合并 3. 案例

        我参加的一次采访中也提出了这个问题。这是带有示例的文章的链接。顺便说一句,这篇文章中还有一个视频。

        Different ways to replace NULLS in SQL Server

        【讨论】:

          【解决方案6】:

          您使用的是什么数据库系统?

          • SQL 服务器、MySQL:IFNULL(value, 0)
          • 甲骨文:NVL(value, 0)
          • PostgreSQL:COALESCE(value, 0)

          【讨论】:

            猜你喜欢
            • 2013-05-26
            • 1970-01-01
            • 2022-01-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2012-09-14
            • 2016-11-09
            • 2018-12-28
            相关资源
            最近更新 更多