CASE WHEN NULL

21/07/2008 - 18:33 por MhBeyle | Informe spam
No logro entender muy bien por qué motivo esta consulta no funciona
bien cuando se da el caso de un registro con NULL:

SELECT
CASE T1.COD
WHEN NULL THEN T2.COD
WHEN 786 THEN '786-'
WHEN 777 THEN '777-'
ELSE T1.COD
END AS COD3, T1.COD AS COD1, T2.COD AS COD2
FROM
T1 FULL OUTER JOIN
T2 ON T1.COD = T2.COD

Cuando el CASE valida el número 786 (o cualquier otro) el resultado es
correcto, pero cuando el valor de la columna es NULL, siempre salta la
cláusula ELSE.

Especificar que lo que intento hacer es un FULL JOIN de dos tablas y
que, cuando la primera contenga un valor Nulo, tome el valor de la
segunda. A lo mejor lo que intento hacer es imposible o sólo es
posible escribiendo valores reales (no selecionados) en una tabla
temporal.

Un saludo,

MhBeyle __
 

Leer las respuestas

#1 MhBeyle
21/07/2008 - 18:52 | Informe spam
Ya me respondo a mí mismo:

SELECT ISNULL(T1.COD, T2.COD) AS COD
FROM
T1 FULL OUTER JOIN
T2 ON T1.COD = T2.COD


MhBeyle __

MhBeyle escribió lo siguiente ...

No logro entender muy bien por qué motivo esta consulta no funciona
bien cuando se da el caso de un registro con NULL:

SELECT
CASE T1.COD
WHEN NULL THEN T2.COD
WHEN 786 THEN '786-'
WHEN 777 THEN '777-'
ELSE T1.COD
END AS COD3, T1.COD AS COD1, T2.COD AS COD2
FROM
T1 FULL OUTER JOIN
T2 ON T1.COD = T2.COD

Cuando el CASE valida el número 786 (o cualquier otro) el resultado es
correcto, pero cuando el valor de la columna es NULL, siempre salta la
cláusula ELSE.

Especificar que lo que intento hacer es un FULL JOIN de dos tablas y
que, cuando la primera contenga un valor Nulo, tome el valor de la
segunda. A lo mejor lo que intento hacer es imposible o sólo es
posible escribiendo valores reales (no selecionados) en una tabla
temporal.

Un saludo,

MhBeyle __

Preguntas similares