SUBQUERY COM JOIN ME MATANDO

FFCOUTO 13/07/2015 13:19:02
#448756
Citação:

:POCE1DON
Porque vocês sabem tanto?



Amigo, a questão não é que sabemos tanto. é apenas uma questão de usar a lógica para buscar os dados, eu digo isso sempre a um outro colega aqui do fórum. O que você precisa ter em mente é ir fazendo as consultas aos poucos e depois juntar para ter o resultado de que precisa.

Para finalizar a sua dúvida.
Basta acrescentar os campos que você precisa (em vermelho), lembro que como há um agrupamento, os campos devem também ser colocados no GROUP BY

SELECT v1.codVenda, Sum(v1.valVenda * v1.Qtde) AS valor, [txt-color=#e80000]v.codCliente, v.CodVendedor, v.Usuario, v.Tipo, v.Desconto[/txt-color]
(
SELECT SUM(valor) AS totalPago FROM tblPagamentos AS pag
WHERE pag.codVenda = v1.codVenda
) AS valorPago
FROM (tblVendidos AS v1 INNER JOIN tblVendidos AS v2 ON v1.codVenda = v2.codVenda)
INNER JOIN tblVendas AS v ON v1.codVenda = v.codCadastro
WHERE (v2.codProduto = 5353) AND (YEAR(v.Data) = 2015) AND (MONTH(v.Data) = 3)
GROUP BY v1.codVenda, [txt-color=#e80000]v.codCliente, v.CodVendedor, v.Usuario, v.Tipo, v.Desconto[/txt-color];


Qualquer outra dúvida é só postar.
FFCOUTO 13/07/2015 13:21:49
#448757
Citação:

:
O que não estou entendendo na consulta dele é essa parte: v1.codVenda = v.codCadastro. Isso realmente tá correto?



Isto está correto sim JABA, observe que ele precisa da data como filtro e este campo está na tabela de vendas (cabeçalho) dai é necessário um JOIN com a tabela vendidos (itens da venda) para chegar no resultado.
JABA 13/07/2015 13:24:31
#448758
Pow, mas um é campo de codVenda e o outro é codCadastro. Você não estaria comparando campos distintos?
FFCOUTO 13/07/2015 13:32:00
#448759
O problema é a normalização dos nomes nas tabelas.
Veja que o campo codCadastro na tabela tblVendas é a chave primária (eu usaria id_venda).
Na tabela tblVendidos o campo que relaciona a tabela de vendas se chama codVenda (eu usaria id_venda).
Parece confuso, no entanto o relacionamento está correto.
JABA 13/07/2015 13:35:32
#448760
Ah sim, é verdade.
POCE1DON 13/07/2015 13:42:52
#448761
olha FFCOUTO, confesso pra vc que precisei lavar meu teclado 53x semana passada de tanto suor das minhas
mãos que ele recebeu das raivas que passei em não conseguir esse resultado que sua query me trouxe, sem falar
nas ameaças de enfiar o sôco no centro de minha tela neh... bom, mas enfim, AILOVIU

será que consigo mais uma ajudona?... tem como aplicar um filtro na soma total vendida e recebida?

Preciso listar as vendas que estão com seu pagamento totalmente informado ou parcial.

Ex.: WHERE (v2.codProduto = 5353) AND Valor = ValorPago OU WHERE (v2.codProduto = 5353) AND ValorPago > 0

é possível?
POCE1DON 13/07/2015 13:51:25
#448762
JABA,
esse é meu primeiro BD mais [Ô]complicadinho[Ô]. é bom saber mais sobre as dicas da normalização que o FFCOUTO já deixou a sua, vou tomar nota dela assim como as de hj que ele está me ensinando nesse meu tópico, e como foi em diversos outros de usuários que acompanhei e me serviu de fonte para tirar dúvidas.


FFCOUTO 13/07/2015 14:21:51
#448763
Bem, acho que isso deve resolver a dúvida final.

SELECT  v2.codVenda, valor, codCliente, codVendedor, Usuario, Tipo, Desconto, valorPago FROM
(
SELECT v1.codVenda, v2.codVenda, SUM(v1.valVenda * v1.Qtde) AS valor, v.codCliente, v.CodVendedor, v.Usuario, v.Tipo, v.Desconto,
(
SELECT IIF( ISNULL(SUM(valor)), 0, SUM(Valor)) AS totalPago FROM tblPagamentos AS pag
WHERE pag.codVenda = v1.codVenda
) AS valorPago
FROM (tblVendidos AS v1 INNER JOIN tblVendidos AS v2 ON v1.codVenda = v2.codVenda)
INNER JOIN tblVendas AS v ON v1.codVenda = v.codCadastro
WHERE (v2.codProduto = 5353) AND (YEAR(v.Data) = 2015) AND (MONTH(v.Data) = 3)
GROUP BY v1.codVenda, v2.codVenda, v.codCliente, v.CodVendedor, v.Usuario, v.Tipo, v.Desconto
) AS temp
WHERE (temp.valorPago > 0)


Obs.: Foi necessário relacionar os campos codVenda duas vezes para que o resultado final pudesse ser mostrado. Se usado uma única vez o Access retornava erro de leitura do registro. Não me pergunte o porquê disso.
POCE1DON 13/07/2015 14:52:16
#448764
é, vc resolveu meu problema FFCOUTO.

Obrigadasso mesmo. Te agradeço muito por ocupar seu tempo em me dar esse apoio aí. Pode contar comigo se precisar de algo aí, não sendo com programação por agora porque não vou te ensinar nada viu...

Bom, agora vou estudar seu código e entender pra aprender também, sempre tentei ir em busca da informação sozinho através das informações que tanto temos na net, mas a programação complicou um pouco na minha vida depois que tive um problema neurológico que a medicina não sabe o porque de ter surgido, e o pior, afetou bastante minha memória e só dizem que vou precisar fazer uso de uma medicação por pelo menos 10 anos e logo após isso tentar suspender seu uso e ver se o organismo não irá reagir com a ausência, essa é a famosa epilepsia. Hj, muito que sei é fruto do conhecimento que ainda me restou, e agora busco novamente o aprendizado mas pelo visto autodidático não consigo mais.

Gostaria de me aprofundar mais na linguagem SQL, e você sendo da área didática, o que recomendaria?
POCE1DON 13/07/2015 14:59:36
#448765
JABA, seu apoio também foi de importância. Vou fazer uso da sua query em outro tipo de consulta que se encaixou perfeitamente. Obrigado!
Página 4 de 4 [40 registro(s)]
Tópico encerrado , respostas não são mais permitidas