Subject Re: [ib-support] FBUDF NVL Problem
Author Valdir Stiebe Junior
I cutted the parts without nvl from original sql. :)
This is what i want to execute. It is a report sql (i can't use SP for this
report in special)
The difference between the first and second sql is that when RA.ID_PAI is
null i have to look at other table called Grupo_Touros to find the data.

select
CRIADOR.ID_PESSOA ID_GRUPO,
SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
INVL(CRIADOR.ID_PESSOA - CRIADOR.ID_PESSOA + 1, 0),
RA.DATA_INI_SERVICO,
RA.DATA_FIM_SERVICO,
A.ID_ANIMAL,
A.BRINCO BRINCO_MAE,
A.NOME NOME_MAE,
A.TATUAGEM TATUAGEM_MAE,
A.REGISTRO REGISTRO_MAE,
PAI.BRINCO BRINCO_PAI,
PAI.NOME NOME_PAI,
PAI.TATUAGEM TATUAGEM_PAI,
PAI.REGISTRO REGISTRO_PAI
from
ANIMAL A inner join
REPRODUCAO_ANIMAL RA on (A.ID_ANIMAL = RA.ID_ANIMAL) inner join
ANIMAL PAI on (PAI.ID_ANIMAL = RA.ID_PAI)
left outer join PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)

where
RA.METODO_SERVICO = 1 and /*Monta Controlada*/
RA.DATA_INI_SERVICO >= '2003-03-13' and RA.DATA_INI_SERVICO <=
'2003-03-14'
and (A.ATIVO = 1)
and (A.ID_ESPECIE = 1)


union

select
INVL(CRIADOR.ID_PESSOA, -1) ID_GRUPO,
SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
INVL(CRIADOR.ID_PESSOA - CRIADOR.ID_PESSOA + 1, 0),
RA.DATA_INI_SERVICO,
RA.DATA_FIM_SERVICO,
A.ID_ANIMAL,
A.BRINCO BRINCO_MAE,
A.NOME NOME_MAE,
A.TATUAGEM TATUAGEM_MAE,
A.REGISTRO REGISTRO_MAE,
PAI.BRINCO BRINCO_PAI,
PAI.NOME NOME_PAI,
PAI.TATUAGEM TATUAGEM_PAI,
PAI.REGISTRO REGISTRO_PAI
from
ANIMAL A inner join
REPRODUCAO_ANIMAL RA on (A.ID_ANIMAL = RA.ID_ANIMAL) left outer join
REPRODUCAO R on (R.ID_REPRODUCAO = RA.ID_REPRODUCAO) inner join
GRUPO_TOUROS GT on (GT.ID_REPRODUCAO = RA.ID_REPRODUCAO) inner join
ANIMAL PAI on (PAI.ID_ANIMAL = GT.ID_ANIMAL)
left outer join PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)

where
RA.METODO_SERVICO = 1 and /*Monta Controlada*/
RA.DATA_INI_SERVICO >= '2003-03-13' and RA.DATA_INI_SERVICO <=
'2003-03-14'
and (A.ATIVO = 1)
and (A.ID_ESPECIE = 1)

order by
3 desc, 2, 1,
3 /*RA.DATA_INI_SERVICO*/,
4 /*RA.DATA_FIM_SERVICO*/,
6 /*A.BRINCO*/,
5 /*A.ID_ANIMAL*/,
10 /*PAI.BRINCO*/


----- Original Message -----
From: "Helen Borrie" <helebor@...>
To: <ib-support@yahoogroups.com>
Sent: Friday, March 14, 2003 10:48 AM
Subject: Re: [ib-support] FBUDF NVL Problem


> At 10:27 AM 14/03/2003 -0300, you wrote:
> >Hi,
> >i'm trying to use a nvl function with a union sql. I'm getting garbage
data
> >instead what i expected.
> >
> >A small exemple of my query is:
> >
> >select
> > INVL(CRIADOR.ID_PESSOA, -1) ID_GRUPO,
> > SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
> > A.ID_ANIMAL
> >from
> > ANIMAL A left outer join
> > PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)
> >
> >
> >union
> >
> >select
> > INVL(CRIADOR.ID_PESSOA, -1) ID_GRUPO,
> > SNVL(CRIADOR.NOME, 'Criador Indefinido') NOME_GRUPO,
> > A.ID_ANIMAL
> >from
> > ANIMAL A left outer join
> > PESSOA CRIADOR on (A.ID_CRIADOR = CRIADOR.ID_PESSOA)
> >
> >This is a know bug?
>
> Not a bug in the engine! :-)
> You are trying to make a union of two identical sets of data from the same
> table.... Still, if this is really what you want to do, the way to make
> the query extract twice from the same tables is to use different table
> aliases for the second set. So, you would have something like this:
>
> select
> INVL(CRIADOR1.ID_PESSOA, -1) ID_GRUPO,
> SNVL(CRIADOR1.NOME, 'Criador Indefinido') NOME_GRUPO,
> A1.ID_ANIMAL
> from
> ANIMAL A1 left outer join
> PESSOA CRIADOR1 on (A1.ID_CRIADOR = CRIADOR1.ID_PESSOA)
>
> union
> select
> INVL(CRIADOR2.ID_PESSOA, -1) ID_GRUPO,
> SNVL(CRIADOR2.NOME, 'Criador Indefinido') NOME_GRUPO,
> A2.ID_ANIMAL
> from
> ANIMAL A2 left outer join
> PESSOA CRIADOR2 on (A.ID_CRIADOR2 = CRIADOR2.ID_PESSOA)
>
> heLen
>
>
>
>
> To unsubscribe from this group, send an email to:
> ib-support-unsubscribe@egroups.com
>
>
>
> Your use of Yahoo! Groups is subject to http://docs.yahoo.com/info/terms/
>