Dr. House Postado Abril 4, 2008 Denunciar Share Postado Abril 4, 2008 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 loinner 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 loinner 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 loinner 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 LOTACAOfrom cadfunc fu order by fu.codfundesde já aguardo por respostas urgeeente Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 5, 2008 Denunciar Share Postado Abril 5, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Dr. House Postado Abril 7, 2008 Autor Denunciar Share Postado Abril 7, 2008 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çosok 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: SELECTo.ID,o.Description,CASEWHEN (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 || ''''ENDFROMOrders oeu 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 distinctcase (lo.codloc)when (lo.codloc is NULL)then 'funciona'else lo.codlocendfromlocal loinner join acumulos acon (ac.local=lo.codloc)inner join cadfunc caon (ac.codfun=ca.codfun)whereac.codfun=ca.codfunandac.ano =2008andac.mes =1 Citar Link para o comentário Compartilhar em outros sites More sharing options...
0 Micheus Postado Abril 8, 2008 Denunciar Share Postado Abril 8, 2008 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 Citar Link para o comentário Compartilhar em outros sites More sharing options...
Pergunta
Dr. House
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
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.