如何在复杂查询中将null替换为0

时间:2011-01-05 13:53:29

标签: sql null replace

我想在null为空时将总值替换为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';

6 个答案:

答案 0 :(得分:6)

您可以使用ISNULL功能。

以下是使用该功能的方法(适用于SQL Server)。

ISNULL(columnName, 0) 

答案 1 :(得分:3)

  

我想替换总数   如果为null,则为0

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

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

至于将表达式合并到某个默认值,如果它是NULL,则有在所有主要数据库中执行此操作的函数(例如:COALESCENVLISNULL,{ {1}})。典型的用途是

IFNULL

有关具体信息,请咨询数据库制造商文档(您可以在线找到)。

答案 2 :(得分:2)

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';

答案 3 :(得分:2)

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

IBM DB2中的函数称为COALESCE(...),而在Oracle SQL中,它是NVL(...)。

这可能很有用

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

答案 4 :(得分:2)

如果您使用的是SQL Server,则可以使用以下3种方法将null替换为任何用户定义的替换值。 ISNULL 2. COALESCE 3.案例

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

Different ways to replace NULLS in SQL Server

答案 5 :(得分:1)

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

  • SQL-Server,MySQL:IFNULL(value, 0)
  • Oracle:NVL(value, 0)
  • PostgreSQL:COALESCE(value, 0)