2012-03-15 10 views
6

Ho la seguente query. Quando type_id is null voglio che sia raggruppato con il nome "sconosciuto".
Come posso farlo.
So che esiste una funzione di decodifica ma non sono sicuro di come utilizzarla.SQL Decode Null Valori

select type_id, 
     name 
    from test_table 
group by decode(type_id,'Unknown'), 
      name; 

come posso fare?

+0

IFNULL(), COALESC() – wildplasser

+0

DECODE è decodificare (colonna, potentialvalue, risultato, 2ndpotentialvalue, risultato, ... NpotentialValue, risultato, elsevalue) le dichiarazioni di caso sono un po 'più facile leggere così sono preferiti da alcuni. Solo FYI - una grande risorsa per la rapida definizione delle funzioni è TechOnTheNet. http://www.techonthenet.com/oracle/functions/decode.php Puoi facilmente google "decodificare Oracle" e ti porta direttamente alla pagina collegata sopra. Salva i post e aspetta una risposta. – user158017

risposta

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

Sono d'accordo con @sql_mommy che CASE sarebbe probabilmente un aspetto migliore. Ma non sono d'accordo sull'utilizzo di TechOnTheNet come fonte primaria di informazioni. Di solito stai meglio con la documentazione ufficiale e il page for DECODE è un buon esempio del perché.

DECODE ha un comportamento strano: "In una funzione DECODE, Oracle considera due null equivalenti." Questo comportamento non è menzionato nell'articolo TechOnTheNet.

+1

+1 per promuovere la documentazione Oracle su TechOnTheNet. TOTN può rendere più semplice la comprensione di alcune funzionalità, ma a volte possono nascondere informazioni importanti. – Ollie

+0

Grazie mille per le informazioni – Arav

9

Per null, abbiamo la funzione NVL. Può essere utilizzato come segue

select nvl(type_id,'Unknown'),name from test_table group by 
type_id,name; 
3

È possibile utilizzare la NVL funzione o COALESCE:

select NVL(type_id, 'Unknown') AS type_id, 
     name 
    from test_table 
group by NVL(type_id, 'Unknown'), 
      name; 

O

select COALESCE(type_id, 'Unknown') AS type_id, 
     name 
    from test_table 
group by COALESCE(type_id, 'Unknown'), 
      name; 

COALESCE è più efficiente di NVL in quanto valuta solo il secondo argomento se il primo è NULL mentre NVL Esamina entrambi gli argomenti ogni volta.

Speranza che aiuta ...