2012-11-26 24 views
5

Jak wiadomo, Oracle traktuje NULL jako jedną "wartość" w zapytaniach GROUP BY. Czy istnieje rozwiązanie zastępujące grupowanie danych traktujących wartości NULL jako różne wartości. Na przykład:Grupa Przez kolumnę z możliwością zerowania

tabeli T:

colA  colB 
A   1 
A   5 
<null>  3 
<null>  2 

select colA, min(colB) from t group by colA Powroty:

colA  colB 
A   1 
<null>  2 

ale chcę zapytanie do powrotu:

colA  colB 
A   1 
<null>  3 
<null>  2 

góry dzięki

Odpowiedz

6
SELECT colA, MIN(colB) 
FROM t 
WHERE colA IS NOT NULL 
GROUP BY colA 
UNION ALL 
SELECT colA, colB 
FROM t 
WHERE colA IS NULL 
+0

Prawidłowe. Dziękuje bardzo. Jak to przegapiłem? –

5

@ odpowiedź LC jest świetny, ale tylko dla sportu tutaj jest inne rozwiązanie:

SELECT colA, min(colB) 
FROM t 
GROUP BY nvl(colA, rownum),colA 

I here jest sqlfiddle demo

+0

Tak, to również bardzo poprawne :) Jednak nieco wolniej niż rozwiązanie Ic. –