Ir para o conteúdo
MMarques

Comparar Tabelas

Mensagens Recomendadas

MMarques    0
MMarques

Olá, tenho uma base de dados e quando quero importar novos dados, importo para uma tabela para comparar os dados dessa tabela nova com os dados existentes na base de dados. O que eu queria agora era uma maneira para ela me avisar que por exemplo, se um dos campos tiver o valor avariado e o da tabela nova disser instalado, ou se na base de dados disser recolhido e na tabela nova disser novo, ele dar-me um erro. Será possível?

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

primeiro que base de dados utilizas??

segundo... o que é um valor avariado???

ou isso sao valores??? "avariado" "novo" "recolhido"

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MMarques    0
MMarques

Peço desculpa por não ter especificado, a base de dados que uso é o access, os valores avariado, novo e recolhido são atributos de um campo, a tabela tem os seguintes campos:

Serial, Cliente, Estado e Data

Esses atributos estão associados ao campo Estado.

EDIT:

Mais ou menos o pretendido seria algo do género uma query que me mostra todos os campos que tenho no ficheiro que vou importar e apenas os campos que existem em ambas as tabelas. Seguindo o Serial. Isto já está implementado e a funcionar agora o pretendido seria adicionar um campo a essa querry que me dissesse algo segundo aquelas condições anteriores.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MMarques    0
MMarques

algo do género

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

isto mostra-me a tabela toda que importei (temporaria) e os respectivos registos que estão na tabela da base de dados.

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data, case .... as nomeDoCampo

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MMarques    0
MMarques

Não estou a entender muito bem a sintaxe, visto que provavelmente ainda vou precisar de vários Cases.

Serial algo assim deste género mas dá-me erro

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

Aviso = CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Diz-me que falta um operador na expressão.

Aviso = CASE DecoEstado.Serial

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Serial

WHEN DecoEstado.Serial = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Serial = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Serial = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ''

END) as Aviso,

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MMarques    0
MMarques

Ups, enganei-me ai, era para ser Estado em vez de Serial. Mas continua a dar o mesmo erro.

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado = Instalado AND Compara.Estado <> Instalado OR Compara.Estado <> Recolha THEN 'Erro'

WHEN DecoEstado.Estado = Recolha AND Compara.Estado <> Recolha OR Compara.Estado <> Novo THEN 'Erro'

WHEN DecoEstado.Estado = Novo AND Compara.Estado <> Novo OR Compara.Estado <> Instalado OR Compara.Estado <> AvariaArmazem THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
MMarques    0
MMarques

Continuo a ter o mesmo erro do missing operator

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado <>' Instalado' OR Compara.Estado <> 'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado <> 'Recolha' OR Compara.Estado <> 'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado <> 'Novo' OR Compara.Estado <> 'Instalado' OR Compara.Estado <> 'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE DecoEstado.Estado

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

tenta assim

se nao der n te sei como ajudar... ao menos que de outro erro...

SELECT Compara.Serial, Compara.Cliente, Compara.Estado, Compara.Data, DecoEstado.Serial, DecoEstado.Cliente, DecoEstado.Estado, DecoEstado.Data,

(CASE

WHEN DecoEstado.Estado Like 'Instalado' AND Compara.Estado NOT LIKE 'Instalado' OR Compara.Estado NOT LIKE  'Recolha' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Recolha' AND Compara.Estado NOT LIKE  'Recolha' OR Compara.Estado NOT LIKE  'Novo' THEN 'Erro'

WHEN DecoEstado.Estado Like 'Novo' AND Compara.Estado NOT LIKE 'Novo' OR Compara.Estado NOT LIKE  'Instalado' OR Compara.Estado NOT LIKE  'AvariaArmazem' THEN 'Erro'

ELSE ""

END) as Aviso

FROM Compara LEFT JOIN DecoEstado ON Compara.Serial = DecoEstado.Serial

ORDER BY DecoEstado.Serial DESC;

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites
migueldesousa    0
migueldesousa

faz tudo outra vez... mas uma coisa de cada vez ... começa a fazer coisas simples por exemplo so com uma tabela

select * , (case when estado like 'instalado' then 'kkcoisa' else 'outra coisa' end ) as aviso from DecoEstado

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora


×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade