我想在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';
答案 0 :(得分:6)
您可以使用ISNULL功能。
以下是使用该功能的方法(适用于SQL Server)。
ISNULL(columnName, 0)
答案 1 :(得分:3)
我想替换总数 如果为null,则为0
这是一种不可能的情况,因为:
COUNT函数始终返回一个整数。结果不能为NULL!
至于将表达式合并到某个默认值,如果它是NULL,则有在所有主要数据库中执行此操作的函数(例如:COALESCE
,NVL
,ISNULL
,{ {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(...)。
这可能很有用
答案 4 :(得分:2)
如果您使用的是SQL Server,则可以使用以下3种方法将null替换为任何用户定义的替换值。 ISNULL 2. COALESCE 3.案例
我参加的一次采访也提出了这个问题。以下是包含示例的文章的链接。顺便说一下,本文中还有一个视频。
答案 5 :(得分:1)
您使用的是什么数据库系统?
IFNULL(value, 0)
NVL(value, 0)
COALESCE(value, 0)