COMPARAR DADOS ENTRE DUAS TABELAS ACCESS
Pessoal, preciso fazer uma comparação entre os dados de duas tabelas e identificar as diferenças e aponta-las em um campo. Preciso identificar pela chave de acesso de uma tabela e localiza-la na segunda tabela e verificar se o numero da NF, a serie, o valor, o icms e se o ipi estão diferentes, quando for identificado diferença quero fazer um update na primeira tabela no campo DESCR_DIVERG, informando tal divergencia. Caso exista mais de uma divergencia no mesmo lançamento, quero ir concatenando a descrição no mesmo campo (EX. ICMS Divergente/ IPI Divergente). Em anexo disponibilizo alguns dados e a estrutura de como irá ficar as tabelas no access.
faça um union:
Select [ô]tabela 1[ô] as tabela, chave, id from tabela1 order by chave
union
select [ô]tabela 2[ô] as tabela, chave, id form tabela2
Select [ô]tabela 1[ô] as tabela, chave, id from tabela1 order by chave
union
select [ô]tabela 2[ô] as tabela, chave, id form tabela2
Mas em um mesmo registro posso ter mais de uma divergencia, o union só irá me apontar a primeira encontrada.
Aà é que está, com o union, vc mostra os dados das duas tabelas e pode comparar todos os campos que quiser...
To apanhando pra caramba com esse select com union, o que está errado?
tabela.Open([Ô]Select MMC_CHAVE_ACS_NFE FROM MMC_NFE_LANC_FISCAIS UNION SELECT MMC_CHAVE FROM MMC_NFE_TOTAIS WHERE MMC_NFE_LANC_FISCAIS.MMC_CHAVE_ACS_NFE = MMC_NFE_TOTAIS.CHAVE_ACESSO AND MMC_NFE_LANC_FISCAIS.ICMSTAX_BRL_AMT <> MMC_NFE_TOTAIS.ICMSTAX_BRL_AMT[Ô], Conexao)
tabela.Open([Ô]Select MMC_CHAVE_ACS_NFE FROM MMC_NFE_LANC_FISCAIS UNION SELECT MMC_CHAVE FROM MMC_NFE_TOTAIS WHERE MMC_NFE_LANC_FISCAIS.MMC_CHAVE_ACS_NFE = MMC_NFE_TOTAIS.CHAVE_ACESSO AND MMC_NFE_LANC_FISCAIS.ICMSTAX_BRL_AMT <> MMC_NFE_TOTAIS.ICMSTAX_BRL_AMT[Ô], Conexao)
Tenta assim:
Select * from (Select MMC_CHAVE_ACS_NFE ChaveLancamentos, [ô][ô] as ChaveAcesso, ICMSTAX_BRL_AMT IcmsLancamento, [ô][ô] IcmsTotal FROM MMC_NFE_LANC_FISCAIS
UNION
SELECT MMC_CHAVE ChaveTotais, CHAVE_ACESSO, [ô][ô], ICMSTAX_BRL_AMT FROM MMC_NFE_TOTAIS)
WHERE
ChaveLancamentos = ChaveAcesso AND
IcmsLancamento <> IcmsTotal
Nota: Não testei essa SQL, sintaticamente me parece correta, se não for extamente assim, é algo bem parecido.
Select * from (Select MMC_CHAVE_ACS_NFE ChaveLancamentos, [ô][ô] as ChaveAcesso, ICMSTAX_BRL_AMT IcmsLancamento, [ô][ô] IcmsTotal FROM MMC_NFE_LANC_FISCAIS
UNION
SELECT MMC_CHAVE ChaveTotais, CHAVE_ACESSO, [ô][ô], ICMSTAX_BRL_AMT FROM MMC_NFE_TOTAIS)
WHERE
ChaveLancamentos = ChaveAcesso AND
IcmsLancamento <> IcmsTotal
Nota: Não testei essa SQL, sintaticamente me parece correta, se não for extamente assim, é algo bem parecido.
Kerplunk, ajustei o select à s minhas tabelas e campos, porém dá o erro [Ô]Nenhum valor foi fornecido para um ou mais parâmetros necessários.[Ô]
tabela.Open([Ô]SELECT * FROM (SELECT A.MMC_CHAVE_ACS_NFE, A.ICMSTAX_BRL_AMT FROM MMC_NFE_LANC_FISCAIS A UNION SELECT B.CHAVE_ACESSO, B.ICMSTAX_BRL_AMT FROM MMC_NFE_TOTAIS) WHERE A.MMC_CHAVE_ACS_NFE = B.CHAVE_ACESSO AND A.ICMSTAX_BRL_AMT <> B.ICMSTAX_BRL_AMT[Ô], Conexao)
tabela.Open([Ô]SELECT * FROM (SELECT A.MMC_CHAVE_ACS_NFE, A.ICMSTAX_BRL_AMT FROM MMC_NFE_LANC_FISCAIS A UNION SELECT B.CHAVE_ACESSO, B.ICMSTAX_BRL_AMT FROM MMC_NFE_TOTAIS) WHERE A.MMC_CHAVE_ACS_NFE = B.CHAVE_ACESSO AND A.ICMSTAX_BRL_AMT <> B.ICMSTAX_BRL_AMT[Ô], Conexao)
Alguém para dar um apoio?
O que está errado neste select?
SELECT A.ICMSTAX_BRL_AMT, A.CHAVE_ACESSO, B.ICMSTAX_BRL_AMT, (A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT), CASE WHEN ((A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT) >
0,04) OR ((A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT) < -0.04) THEN [ô]ICMS DIVERGENTE[ô] END AS STATUS
FROM MMC_NFE_TOTAIS AS A, MMC_NFE_LANC_FISCAIS B
WHERE (((A.CHAVE_ACESSO)=[ô]55110992877354001111550010000079331024476010[ô]))
quando rodo dá erro de sintaxe (operador faltando)
SELECT A.ICMSTAX_BRL_AMT, A.CHAVE_ACESSO, B.ICMSTAX_BRL_AMT, (A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT), CASE WHEN ((A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT) >
0,04) OR ((A.ICMSTAX_BRL_AMT - B.ICMSTAX_BRL_AMT) < -0.04) THEN [ô]ICMS DIVERGENTE[ô] END AS STATUS
FROM MMC_NFE_TOTAIS AS A, MMC_NFE_LANC_FISCAIS B
WHERE (((A.CHAVE_ACESSO)=[ô]55110992877354001111550010000079331024476010[ô]))
quando rodo dá erro de sintaxe (operador faltando)
Tópico encerrado , respostas não são mais permitidas