Ver Mensaje Individual
  #1 (permalink)  
Antiguo 06/04/2006, 02:03
Avatar de Bravenap
Bravenap
 
Fecha de Ingreso: noviembre-2002
Ubicación: Los Arroyos, El Escorial, Madrid
Mensajes: 2.084
Antigüedad: 21 años, 6 meses
Puntos: 4
Usar case en las condiciones de búsqueda

Es una consulta un poco liadilla y quizás esté mal planteada desde el principio.

Código:
ALTER PROCEDURE PA_BuscaTaxa
(
	@nome varchar(250)
)
AS
BEGIN
	DECLARE @tabla TABLE (ID int, Nombre nvarchar(250))
	INSERT INTO @tabla SELECT 
		(CASE WHEN tax.SinonimoDe IS NOT NULL THEN tax.SinonimoDe ELSE tax.ID END) AS "ID",
		(CASE 
			WHEN tax.IDTipo = 14 THEN RTRIM(padre2.Nombre)+' '+RTRIM(padre1.Nombre)+' subsp. '+RTRIM(tax.Nombre)
			WHEN tax.IDTipo = 13 THEN RTRIM(padre1.Nombre)+' '+RTRIM(tax.Nombre)
			WHEN tax.IDTipo < 13 THEN RTRIM(tax.Nombre)
		END) AS "Nombre"
		FROM tabTaxa as tax
		INNER JOIN
			tabTaxa AS padre1 ON padre1.ID = tax.IDPadre
		LEFT JOIN 
			tabTaxa AS padre2 ON padre2.ID = padre1.IDPadre
		WHERE 
			tax.Activado = 1
	SELECT * 
	FROM @tabla
	WHERE Nombre LIKE  '%'+@nome+'%'
END
Funciona bien casi siempre excepto cuando IDPadre es nulo. En realidad sólo hay un registro en tabTaxa donde IDPadre es nulo, pero tiene IDTipo < 13, por lo que no necesitaría de las tablas con alias padre1 y padre2. Había pensado en poner un condicional de este modo:
Código:
...
INNER JOIN
	tabTaxa AS padre1 ON padre1.ID = (CASE WHEN tax.IDPadre IS NOT NULL THEN tax.IDPadre ELSE ¿? END)
...
¿Alguna idea?

Gracias y un saludo.
__________________
¡¡NO A LA GUERRA!!
Si ponemos a nuestros mensajes títulos adecuados, la gente se animará más a abrirlos y resultarán más útiles en las busquedas. ¡No a los ayuuudaaa, urgenteee y similares!