SUBQUERY COM JOIN ME MATANDO
SELECT v1.codVenda, Sum(v1.valVenda * v1.Qtde) AS valor,
(
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
WHERE v2.codProduto = 5353
GROUP BY v1.codVenda;
Citação::
POSE1DON, faça assim que acho que vai melhorar bastante a performance da consulta. Talvez caia pela metade esse tempo.
SELECT codVenda, sum(valVendido * Qtde) as valor FROM tblvendidos where codVenda in ( select codVenda from tblvendidos where codProduto = 5353 group by codVenda) group by codVenda;
Jaba, a performace melhorou MUUUUIIIITOOOOOOOO.... não tem nada a ver com aquela de ontem, está praticamente instantânea aqui na minha máquina.
Essa seria então a forma definitiva pra gente realizar as buscas?
Minha dúvida quanto à isso é por conta da configuração que minha máquina tem e onde o sistema está rodando, já que aqui é um i7-3820 3,5ghz 16gb ram com ssd e em um dos clientes é apenas um pentium dual-core 2.1ghz com 2gb de ram
Citação::
Veja se esta query resolver o problema:
SELECT v1.codVenda, Sum(v1.valVenda * v1.Qtde) AS valor,
(
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
WHERE v2.codProduto = 5353
GROUP BY v1.codVenda;
FFCOUTO
Sua query está perfeita na soma, mas sua ajuda ainda é necessária. As vendas vão ser localizadas baseadas no codigo do produto e também na data
de realização que está a tblVendas
O usuário irá especificar o código do produto e mês e ano, e assim as vendas são listadas.
Se for apenas por mês e ano a query fica assim:
SELECT v1.codVenda, Sum(v1.valVenda * v1.Qtde) AS valor,
(
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;
Se for por um perÃodo de dias, assim:
SELECT v1.codVenda, Sum(v1.valVenda * v1.Qtde) AS valor,
(
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 (v.Data >= #03/01/2015#) AND (v.Data <= #03/31/2015#)
GROUP BY v1.codVenda;
Porque vocês sabem tanto?
Cara, eu passei a semana passada toda lutando pra chegar perto disso aqui mas sempre sem sucesso. Fui atrás de informações de todos os tipos pra entender melhor como as funções e cláusulas funcionam mas tudo foi sem sucesso e você simplesmente em alguns minutinhos praticamente resolve todo o meu problema.
O [Ô]grosso[Ô] do que eu precisava vc já resolveu, agora eu tentei mais uma coisa aqui e não consegui, será que também pode resolver isso pra mim?
O SELECT precisa apresentar alem dos valores como agora, a data da venda e código do cliente, informações que estão em tblVendas.
Por favor, como faço pra isso acontecer?
Já fica aqui o meu muito obrigado!
SELECT sum(p.Valor) as valoresDePagamento, v.valor as ValoresDeVendas from tblpagamentos p inner join (SELECT codVenda, sum(valVendido * Qtde) as valor FROM tblvendidos where codVenda in ( select codVenda from tblvendidos where codProduto = 5353 group by codVenda) group by codVenda) as v on p.codVenda = v.codVenda group by p.codVenda;
Citação::
Veja se essa consulta atende ao que você precisa:
SELECT sum(p.Valor) as valoresDePagamento, v.valor as ValoresDeVendas from tblpagamentos p inner join (SELECT codVenda, sum(valVendido * Qtde) as valor FROM tblvendidos where codVenda in ( select codVenda from tblvendidos where codProduto = 5353 group by codVenda) group by codVenda) as v on p.codVenda = v.codVenda group by p.codVenda;
Ops!
Faltou agregar, mas onde?
Your query does not include the specified expression [ô]ValoresDeVendas[ô] as part of an aggregate function.
SELECT sum(p.Valor), v.valor from tblpagamentos as p inner join (SELECT codVenda, sum(valVendido * Qtde) as valor FROM tblvendidos where codVenda in ( select codVenda from tblvendidos where codProduto = 5353 group by codVenda) group by codVenda) as v on p.codVenda = v.codVenda group by p.codVenda;
Citação::
Tenta assim então:
SELECT sum(p.Valor), v.valor from tblpagamentos as p inner join (SELECT codVenda, sum(valVendido * Qtde) as valor FROM tblvendidos where codVenda in ( select codVenda from tblvendidos where codProduto = 5353 group by codVenda) group by codVenda) as v on p.codVenda = v.codVenda group by p.codVenda, [txt-color=#e80000]v.valor[/txt-color];
Faltou apenas agrupar o que esta em vermelho.
Tanto essa sua query quanto a do FFCOUTO estão funcionando, mas a dele está mais rápida. Essa sua está retornando com a velocidade de 00:00:00.262 e a dele em apenas 00:00:00.053
Teste aà pra vc ver.
O que estou tentando adaptar tanto na sua quanto na dele é para obter os dados que estão em tblVendas, como o codCliente, codVendedor, Desconto...
Sabe como fazer?