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.