SQL解码空值

Ara*_*rav 8 sql oracle

我有以下查询.当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文章中没有提到这种行为.

  • +1 通过 TechOnTheNet 推广 Oracle 文档。TOTN 可以使某些功能更容易理解,但有时会掩盖重要信息。 (2认同)

Che*_*min 9

对于null,我们有NVL功能.它可以如下使用

select nvl(type_id,'Unknown'),name from test_table group by
type_id,name;
Run Code Online (Sandbox Code Playgroud)


Oll*_*lie 5

您可以使用该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每次都计算两个参数。

希望能帮助到你...