SUBQUERY COM JOIN ME MATANDO
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.
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.
Pow, mas um é campo de codVenda e o outro é codCadastro. Você não estaria comparando campos distintos?
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.
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.
Ah sim, é verdade.
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?
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?
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.
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.
Bem, acho que isso deve resolver a dúvida final.
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.
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.
é, 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?
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?
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!
Tópico encerrado , respostas não são mais permitidas