我有以下查询.当type_id is null我希望它按名称"未知"分组时.
我该怎么做.
我知道有一个解码功能,但我不知道如何使用它.
select type_id,
name
from test_table
group by decode(type_id,'Unknown'),
name;
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
Jon*_*ler 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;
Run Code Online (Sandbox Code Playgroud)
我同意@sql_mommy CASE可能看起来更好.但我不同意使用TechOnTheNet作为您的主要信息来源.使用官方文档通常会更好,而DECODE的页面就是一个很好的例子.
DECODE有一些奇怪的行为:"在DECODE函数中,Oracle认为两个空值是等价的." TechOnTheNet文章中没有提到这种行为.
对于null,我们有NVL功能.它可以如下使用
select nvl(type_id,'Unknown'),name from test_table group by
type_id,name;
Run Code Online (Sandbox Code Playgroud)
您可以使用该NVL函数或COALESCE:
select NVL(type_id, 'Unknown') AS type_id,
name
from test_table
group by NVL(type_id, 'Unknown'),
name;
Run Code Online (Sandbox Code Playgroud)
或者
select COALESCE(type_id, 'Unknown') AS type_id,
name
from test_table
group by COALESCE(type_id, 'Unknown'),
name;
Run Code Online (Sandbox Code Playgroud)
COALESCENVL比如果第一个参数为 NULL 则只计算第二个参数更有效,而NVL每次都计算两个参数。
希望能帮助到你...