Bom dia,
Resumidamente, vou explicar o que acontece.
Tenho 27 tabelas, cujas são dados de planilhas do excel que as atualizo diariamente através de uma aplicação .NET que fiz. Enfim, essas tabelas possuem registros diários de funcionários. Não há qualquer ligação de dependência/relacionamento entre as tabelas, porém, existem algumas tabelas que opssuem funcionários em comum, outras não. Só que se eu fizer um select genérico para todas as tabelas pelo nome do funcionario, o retorno é sempre nulo, uma vez que há colunas que virão preenchidas, e há colunas que não virão.
Gostaria de saber se existe alguma forma de colocar um valor, tipo -1, nessas colunas que não retornarão valor.
Obrigado,
Cayo
Retornar valor quando não houver registro.
-
- Rank: Programador Júnior
- Mensagens: 23
- Registrado em: Sex, 16 Nov 2007 8:12 am
- Localização: ES
- dr_gori
- Moderador
- Mensagens: 5024
- Registrado em: Seg, 03 Mai 2004 3:08 pm
- Localização: Portland, OR USA
- Contato:
Thomas F. G
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Você já respondeu a dúvida de alguém hoje?
https://glufke.net/oracle/search.php?search_id=unanswered
Pra isso, você pode usar NVL se os campos estão NULL.
Exemplo:
Caso tenha um outro valor, você pode usar DECODE.
Exemplo: digamos que os campos que estão em branco estão vindo com um espaço em branco:
Dessa forma acima, caso tenha um espaço em branco, ele vai colocar -1, senão coloca o próprio valor do campo.
Era isso?
Exemplo:
select
NVL( campo1, -1) campo1
, NVL( campo2, -1) campo2
, ...etc
Exemplo: digamos que os campos que estão em branco estão vindo com um espaço em branco:
select
DECODE( campo1, ' ', -1, campo1) campo1
, DECODE( campo2, ' ', -1, campo2) campo2
, ...etc
Era isso?
-
- Rank: DBA Pleno
- Mensagens: 241
- Registrado em: Ter, 09 Out 2007 11:15 am
- Localização: Batatais - SP
e ai... beleza...
bom ao sei se eu q entendi ma mais oque você precisa é recerente ao valor retornar nulo ou não retornar valor nenhum???
caso seja a segunda opcao você deverá usar um outer join no seu where...
por exemplo:
o registro existe na tabela A porem é possivel que não exista na tabela B,
o select para retornar todos os caras da A
bom ao sei se eu q entendi ma mais oque você precisa é recerente ao valor retornar nulo ou não retornar valor nenhum???
caso seja a segunda opcao você deverá usar um outer join no seu where...
por exemplo:
o registro existe na tabela A porem é possivel que não exista na tabela B,
o select para retornar todos os caras da A
select *
from A
,B
where a.chave = b.chave(+)
-
- Rank: Programador Júnior
- Mensagens: 23
- Registrado em: Sex, 16 Nov 2007 8:12 am
- Localização: ES
Galera, sou novo no fórum, e estou surpreso com a rapidez no suporte.
Eu li a respeito da função NVL, não consegui compreender exatamente.
Amigos vou lhes mostrar em um exemplo bem rápido e simples, o meu problema. O que tenho é o seguinte:
No resultado desse select pelo "*=" consigo obter uma linha com todas as colunas das 2 tabelas. assim:
Note que as colunas que não possuem valor, retornam nulo, mas retornam!!
Mas isso tudo eu consegui fazer no SQL 2000, na empresa que desenvolvo, o banco é oracle. No oracle, como faço isso?? Porque no select q to fazendo, nada está sendo retornado pois se não existir valor em alguma coluna, ele não retorna linha nenhuma (fica identico a esse select, porém ao invés do "*=", o resultado sai como se eu tivesse usado apenas "=".
Eu li a respeito da função NVL, não consegui compreender exatamente.
Amigos vou lhes mostrar em um exemplo bem rápido e simples, o meu problema. O que tenho é o seguinte:
CREATE TABLE TABELA1
(
NOME VARCHAR(30) NOT NULL,
DATA DATETIME NOT NULL,
OS_ABERTAS INT NOT NULL,
OS_PENDENTES INT NOT NULL,
OS_FECHADAS INT NOT NULL)
CREATE TABLE TABELA2
(
NOME VARCHAR(30) NOT NULL,
DATA DATETIME NOT NULL,
OS_ABERTAS INT NOT NULL,
OS_PENDENTES INT NOT NULL,
OS_FECHADAS INT NOT NULL)
INSERT INTO TABELA1
SELECT 'RICARDO', (SELECT GETDATE()), 2, 3, 1
SELECT * FROM TABELA1 AS T1, TABELA2 AS T2 WHERE T1.OS_ABERTAS *= T2.OS_ABERTAS AND T1.NOME='RICARDO'
RICARDO 2007-11-16 21:19:33.053 2 3 1 NULL NULL NULL NULL NULL
Mas isso tudo eu consegui fazer no SQL 2000, na empresa que desenvolvo, o banco é oracle. No oracle, como faço isso?? Porque no select q to fazendo, nada está sendo retornado pois se não existir valor em alguma coluna, ele não retorna linha nenhuma (fica identico a esse select, porém ao invés do "*=", o resultado sai como se eu tivesse usado apenas "=".
-
- Rank: Estagiário Júnior
- Mensagens: 2
- Registrado em: Sáb, 17 Nov 2007 2:21 pm
- Localização: São Paulo - SP
Neste caso, use o explicado na segunda resposta.
ele retornará os campos da tabela2 como nulos, mesmo que nada seja encontrado nesta tabela.
SELECT * FROM TABELA1 T1, TABELA2 T2 WHERE T1.OS_ABERTAS = T2.OS_ABERTAS(+) AND T1.NOME='RICARDO';
-
- Rank: Programador Júnior
- Mensagens: 23
- Registrado em: Sex, 16 Nov 2007 8:12 am
- Localização: ES
Muito Obrigado a todos vocês, a dica ficou excelente!
Obrigado mesmo.
Obrigado mesmo.
-
- Rank: Analista Júnior
- Mensagens: 90
- Registrado em: Qui, 23 Ago 2007 3:40 pm
- Localização: São José do Rio Preto - SP
Ow... tipo... eu acho que o que você precisa é um full join... vê se esse te serve:
falou!
SELECT *
FROM TABELA1 T1
FULL OUTER JOIN TABELA2 T2
ON (1.OS_ABERTAS = T2.OS_ABERTAS)
WHERE T1.NOME = 'RICARDO';
-
- Informação
-
Quem está online
Usuários navegando neste fórum: Nenhum usuário registrado e 21 visitantes