Jump to content
Fórum Script Brasil
  • 0
Sign in to follow this  
Dr. House

Ajuda forebird 153

Question

Ola pessoa, vou explicar direitinho eu estou com um banco e dados de um sistema de RH pra migra para o meu banco.

ambos em Firebird 153.

bom, como a estrutura do outro banco é diferente estou tendo algumas dificuldades na migração. :blink: <_<

bom, eu fiz uma consulta muito grande com algumas sub consultas nela.

estas subconsultas tem como objetivo completar algumas fields da minha tabela.

porem algumas dessas subconsutlas estao retornando alguns Null :angry:

o que eu preciso é q quando essas sub consultas retorenm Null eles troquem por '99'

como eu faço???

a baixo segue o select:

select

fu.codfun as FUNCIONARIOS,

fu.nomfun as NOME,

fu.endfun as ENDERECO,

'' as COMPLEND,

fu.baifun as BAIRRO,

49160 as CIDADE,

49160 as NATURALIDADE,

10 as NACIONALIDADE,

'' as TELCELULAR,

'' as TELRECADO,

'' as TELRESIDENCIA,

'' as EMAIL,

fu.caride as NUMERORG,

'01.01.2008' as DATAEMISSAORG,

'SSPSE' as ORGAOEMISSOR,

'' as CTPS,

'' as SERIE,

'01.01.1899' as DATAEMISSAOCTPS,

'SE'as UF,

fu.titulo as TITULO,

fu.zona as ZONA,

fu.secao as SECAO,

fu.cpffun as CPF,

'' as PIS,

'' as HABILITACAO,

'' as RESERVISTA,

fu.pisfun as NUMEROPIS,

fu.sexfun as sexo,

fu.estciv as ESTADOCIVIL,

'' as NUMTERMO,

'' as LIVRO,

'' as FOLHA,

'01.01.2008' as DATAEMISSAOCERTIDAO,

'' as NOMECARTORIO,

'99'as GRAUINSTRUCAO,

'99'as TIPOSANGUINEO,

'9'as RACA,

fu.sitfun as ORIGEM ,

'99'as TIPODEFICIENCIA,

fu.dtaadm as DATACHEGADA,

'01-01-1899' as DATANASCIMENTO,

fu.dtaadm as DATAADMISSAO,

'1'as TIPOPAGAMENTO,

'1' as ATOPESSOAL,

--**********CBO**********************

(

select distinct

(a.codcbo)

from

tabfun a

inner join acumulos ac

on(ac.tabfun=a.codfun)

inner join cadfunc c

on(ac.codfun=c.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2) as cbo,

--************FUNCAO*****************

(

select distinct

(a.tabfun)--codigodafuncao

from

acumulos a --tabela funcionario

inner join tabfun b

on (a.tabfun=b.codfun)

where

a.codfun=fu.codfun

and

a.ano =2008

and

a.mes =2

) as funcao,

'1' as NIVEL,

'1' as VINCULO,

'1' as SINDICATOS,

-------SETORES------------------------

(

select distinct

(lo.codloc)

from

local lo

inner join acumulos ac

on (ac.local=lo.codloc)

inner join cadfunc ca

on (ac.codfun=fu.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2

) as SETORES,

---------- CENTROCUSTO -------------

(

select distinct

(lo.codloc)

from

local lo

inner join acumulos ac

on (ac.local=lo.codloc)

inner join cadfunc ca

on (ac.codfun=fu.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2

) as CENTROCUSTO,

--------- LOTACAO -----------------

(

select distinct

(lo.codloc)

from

local lo

inner join acumulos ac

on (ac.local=lo.codloc)

inner join cadfunc ca

on (ac.codfun=fu.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2

) as LOTACAO

from

cadfunc fu

order by fu.codfun

desde já aguardo por respostas urgeeente

Share this post


Link to post
Share on other sites

3 answers to this question

Recommended Posts

  • 0

Dr. House, como seu post é específico sobre banco de dados, estou movendo este tópico para a sessão Banco de Dados->Demais Bancos.

Mas, como mexo com o Firebird, vou lhe deixar uma sugestao. ;)

Ola pessoa, vou explicar direitinho eu estou com um banco e dados de um sistema de RH pra migra para o meu banco.

ambos em Firebird 153.

Já pensou em migrar para a versão 2.0?

porem algumas dessas subconsutlas estao retornando alguns Null :angry:

o que eu preciso é q quando essas sub consultas retorenm Null eles troquem por '99'

como eu faço???

Faça uso da função COALESCE - se não estou enganado, ela já estava disponível na versão 1.5 do Firebird.

A Sintax é: coalesce(<campo/experessão>, <valor caso nulo>)

No caso das sub-selects que retornam nulo, você poderia usá-la na sua consulta assim:

select

fu.codfun as FUNCIONARIOS,

fu.nomfun as NOME,

:

:

'1' as ATOPESSOAL,

--**********CBO**********************

coalesce((

select distinct

(a.codcbo)

from

tabfun a

inner join acumulos ac

on(ac.tabfun=a.codfun)

inner join cadfunc c

on(ac.codfun=c.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2), '99') as cbo,

--************FUNCAO*****************

:

:

Abraços

Share this post


Link to post
Share on other sites
  • 0
Dr. House, como seu post é específico sobre banco de dados, estou movendo este tópico para a sessão Banco de Dados->Demais Bancos.

Mas, como mexo com o Firebird, vou lhe deixar uma sugestao. ;)

Ola pessoa, vou explicar direitinho eu estou com um banco e dados de um sistema de RH pra migra para o meu banco.

ambos em Firebird 153.

Já pensou em migrar para a versão 2.0?

porem algumas dessas subconsutlas estao retornando alguns Null :angry:

o que eu preciso é q quando essas sub consultas retorenm Null eles troquem por '99'

como eu faço???

Faça uso da função COALESCE - se não estou enganado, ela já estava disponível na versão 1.5 do Firebird.

A Sintax é: coalesce(<campo/experessão>, <valor caso nulo>)

No caso das sub-selects que retornam nulo, você poderia usá-la na sua consulta assim:

select

fu.codfun as FUNCIONARIOS,

fu.nomfun as NOME,

:

:

'1' as ATOPESSOAL,

--**********CBO**********************

coalesce((

select distinct

(a.codcbo)

from

tabfun a

inner join acumulos ac

on(ac.tabfun=a.codfun)

inner join cadfunc c

on(ac.codfun=c.codfun)

where

ac.codfun=fu.codfun

and

ac.ano =2008

and

ac.mes =2), '99') as cbo,

--************FUNCAO*****************

:

:

Abraços

ok modera foi mal a pergunta especifica aí. eu tentei o coaleace e não adiantou não.

eu tão eu fui mais logico e tentei usar um case só que o ib expert não esta reconhecendo a funcao.

eu peguei o exemplo la da pasta doc do firebird:

SELECT

o.ID,

o.Description,

CASE

WHEN (o.Status IS NULL) THEN 'new'

WHEN (o.Status = 1) THEN 'confirmed'

WHEN (o.Status = 3) THEN 'in production'

WHEN (o.Status = 4) THEN 'ready'

WHEN (o.Status = 5) THEN 'shipped'

ELSE 'unknown status ''' || o.Status || ''''

END

FROM

Orders o

eu estou usando o IbExpert. mas quando rodo minha consulta, gera o seguinte erro: :angry:

Invalid token.

Dynamic SQL Error.

SQL error code = -104.

Token unknown - line 3, char 19.

is.

a consulta é a seguinte:

select distinct

case (lo.codloc)

when (lo.codloc is NULL)

then 'funciona'

else lo.codloc

end

from

local lo

inner join acumulos ac

on (ac.local=lo.codloc)

inner join cadfunc ca

on (ac.codfun=ca.codfun)

where

ac.codfun=ca.codfun

and

ac.ano =2008

and

ac.mes =1

Share this post


Link to post
Share on other sites
  • 0
eu tentei o coaleace e não adiantou não.
Como não adiantou? Ocorreu algum erro?

Pelo que apurei, a função já existia mesmo na versão 1.5. Veja neste artigo: Construa selects mais inteligentes com o Firebird 1.5 (procure pela palavra COALESCE).

eu tão eu fui mais logico e tentei usar um case só que o ib expert não esta reconhecendo a funcao.
o uso da função é equivalente - é só procurar no que há de documentação (agora eu não tenho a ref. para lhe passar).

Aparentemente não vejo erro na consulta. Vou dar uma olhada no que tenho em casa e posto alguma coisa depois (caso mais ninguém se manifeste).

Abraços

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  



  • Forum Statistics

    • Total Topics
      148603
    • Total Posts
      644297
×
×
  • Create New...