我有以下查询。当type_id is null
我希望将其按名称“未知”分组时
我怎么能这样做。
我知道有一个解码功能,但我不知道如何使用它。
select type_id,
name
from test_table
group by decode(type_id,'Unknown'),
name;
我该怎么办?
答案 0 :(得分:13)
select decode(type_id, null, 'Unknown', type_id), name, count(*)
from
(
select 'asdf' type_id, 'name1' name from dual union all
select 'asdf' type_id, 'name2' name from dual union all
select null type_id, 'name3' name from dual
) test_table
group by type_id,name;
我同意@sql_mommy CASE
可能看起来更好。但我不同意使用TechOnTheNet作为您的主要信息来源。使用官方文档通常会更好,page for DECODE就是一个很好的例子。
DECODE
有一些奇怪的行为:“在DECODE函数中,Oracle认为两个空值是等价的。” TechOnTheNet文章中没有提到这种行为。
答案 1 :(得分:9)
对于null,我们有NVL功能。它可以如下使用
select nvl(type_id,'Unknown'),name from test_table group by
type_id,name;
答案 2 :(得分:3)
您可以使用NVL
功能或COALESCE
:
select NVL(type_id, 'Unknown') AS type_id,
name
from test_table
group by NVL(type_id, 'Unknown'),
name;
或者
select COALESCE(type_id, 'Unknown') AS type_id,
name
from test_table
group by COALESCE(type_id, 'Unknown'),
name;
COALESCE
比NVL
更有效,因为它只计算第二个参数,如果第一个是NULL,而NVL
每次都计算两个参数。
希望它有所帮助...