Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda forebird 153


Dr. House

Pergunta

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

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...