QUERY CONSULTA EM 2 TABELAS

26/11/2013

Amigos, poderiam me ajudar no seguinte cenário.

Tenho 2 bases de dados - Base1 e Base2, com as tabelas Table1 e Table2. imagem link [url]http://imageshack.com/a/img600/5315/nziw.png[/url]

Gostaria de saber como posso fazer para inserir na [b]Table2[/b] uma consulta feita na [b]Table1[/b]

[b]Table1[/b] Contém as seguintes colunas (CONCATENADO_ABC, CIDADE, BAIRRO, CPF, VALOR DA PARCELA, TOTAL PARCELA) Na Coluna CONCATENADO_ABC, se econtra concatenado as campos das colunas CIDADE, BAIRRO E CPF. conforme podem ver na imagem [url]http://imageshack.com/a/img607/1165/t3h7.png[/url]

Na tabela 2 [b]Table2[/b] eu tenho 2 colunas, CONCATENADO_ABC que é igual ao da [b]Table1[/b] e TOTAL A PRAZO, que seria o (VALOR DA PARCELA * TOTAL DA PARCELA) que se encontra na [b]Table1[/b]. Como mostra a imagem. [url]http://imageshack.com/a/img842/1355/tijm.png[/url]

Enfim, como posso montar uma query que traga para a [b]Table2[/b] na coluna TOTAL A PRAZO os valores do total parcelado.

Desde já agradecido pela ajuda.

Luiz Souzaos

Respostas

27/11/2013

Isaac Jose

amigo vc consegue fazer de algumas formas...
com update;;;;;
e com insert..


com insert faça primeiro a consolidação do favor em uma tabela ... tmp que seja...

depois faca insert into campos tb1 mais os valores recebidos da tb 2....

esta tarde já estou com sono não consigo explicar melhor...
duvidas e so postar e amanha respondo....
ops mais tarde kkk
Responder Citar

27/11/2013

Isaac Jose

Bom dia segue o codigo..
espero que funcione..

--INICIA A TRANSAÇÃO
BEGIN TRAN

update table2
set totalaPrazo = (table1.valorDaParcela * table1.TotalDaParcela)
from table2
inner join table1
on table2.concatenado_abc = table1.concatenado_abc


--CASO FUNIONE UTILIZE O CODIGO ABAIXO
COMMIT
--CASO AO CONTRARIO
ROLLBACK

att
Isaac
Responder Citar

27/11/2013

Luiz Souzaos

Issac bom dia. Desculpe a demora em retornar.

Aqui o código funcionou parcialmente, pegou apenas o calculo do primeiro campo, mas acho também que não expliquei muito bem minha dúvida.

Vou postar as imagens que fiz, que fica melhor que qualquer explicação. rs

Neste caso como poderia ter na coluna VALOR JÁ PAGO o total geral que o cliente já pagou?

Estrutura da Minha base, as tabelas estão em bases diferentes ( [url]http://imageshack.com/a/img600/5315/nziw.png[/url] )

A estrutura da Tabela1 e Tabela2 ( [url]http://imageshack.com/a/img11/7762/7gn7.png[/url] )

Issac, desde já agradecido pela ajuda.
Responder Citar

27/11/2013

Isaac Jose

nao consigo ver aqui no trabalho...
vc quer dizer que os bancos sao diferentes??
case seja isso.

insira na consulta...

base1.tabela1.campo
base2.tabela2.campo

e assim por diante no almoço consigo verificar melhor.
abraços
Responder Citar

27/11/2013

Isaac Jose

sua conta esta errada.. o valor pago é de 270 e na tabela esta de 240..
no código que eu te enviei coloque

coloque no final

where base1.table1.valorjapago = 'pagou e no set coloque..
set campo = sum(campo2)

acho que deve funcionar'
Responder Citar

27/11/2013

Isaac Jose

Bom dia segue o codigo.. espero que funcione.. --INICIA A TRANSAÇÃO BEGIN TRAN update table2 set totalaPrazo = (table1.valorDaParcela * table1.TotalDaParcela) from table2 inner join table1 on table2.concatenado_abc = table1.concatenado_abc --CASO FUNIONE UTILIZE O CODIGO ABAIXO COMMIT --CASO AO CONTRARIO ROLLBACK att Isaac




--INICIA A TRANSAÇÃO
BEGIN TRAN

update base2.table2
set base2.table2.valorPago = sum(base.table1.totalcompral)
from base2.table2
inner join base1.table1
on base2.table2.concatenado_abc = base1.table1.concatenado_abc


--CASO FUNIONE UTILIZE O CODIGO ABAIXO
COMMIT
--CASO AO CONTRARIO
ROLLBACK


pronto amigo... deve funcionar...
duvidas e so falar
Responder Citar

27/11/2013

Luiz Souzaos

Isaac,

Fiz da seguinte forma e não funcionou, estou tendo o erro
Msg 157, Level 15, State 1, Line 4
An aggregate may not appear in the set list of an UPDATE statement.


update table2
set totalaPrazo = SUM(BASE1.TABLE1.TOTAL_COMPRA)
FROM [table2]
INNER join BASE1.table1
on table2.concatenado_abc = table1.concatenado_abc
where base1.table1.[valor ja pago] = 'pagou'
Responder Citar

27/11/2013

Isaac Jose

cara esqueci que ele nao deixa fazer com agregação...
eu tenho um exemplo mais nao consigo testar agora... por hora parece estar certo..


UPDATE p
SET QtdContMes = t.QtdContDia
FROM table2 AS p INNER JOIN
(
SELECT
id,
SUM(QtdContDia) QtdContDia
FROM
table1
WHERE [condicao] = 1
GROUP BY id
) t
ON t.id = p.id
WHERE
p.condição = 1001
Responder Citar

27/11/2013

Luiz Souzaos

Isaac,

Funcionou perfeitamente.. Muito obrigado pela ajuda e atenção.

Abraço!!!
Responder Citar

27/11/2013

Isaac Jose

por nada...
1 conselho...
estude a estrutura dos valores de campos para que você consiga entender como exemplo. a diferença entre vachar e nvarchar...
isso conta muito em ambientes de produção..
outra coisa o campo que vc esta comparando ex 'pagou'..
tente deixar esses campos de comparação como números para melhorar a performance juntamente com o tamanha ta tabela..
altere esse campo para status pagamento onde 1 significa que o pagamento foi efetuado e 0 que ele não foi efetuado por exemplo..

abraços e disponha
Responder Citar

28/11/2013

Luiz Souzaos

Muito obrigado pelas dicas, estou começando agora a aprender o sql, e essas dicas são muito valiosas.
Teria algum curso online ou site que me indica para estudar?

Abraço!
Responder Citar

28/11/2013

Isaac Jose

Cara gratuitas acho q tem no youtube...
são ótimas....

sql vc tem que ter ideia do que ira fazer os códigos com o básico vc consegue montar sua logica e agir .... a parte avançada e bem mais embaixo... e requer cálculos de performance
sobre registros*bases e tornar todas viáveis em questão de informação e velocidade.....
pesquise formação 2778,6231,6232,6234,6235,6236

abraços
Responder Citar