SUBQUERY COM JOIN ME MATANDO

FFCOUTO 13/07/2015 11:23:00
#448742
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;


POCE1DON 13/07/2015 11:26:55
#448743
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
POCE1DON 13/07/2015 11:41:00
#448745
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.

FFCOUTO 13/07/2015 11:49:14
#448746
POCE1DON

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;

POCE1DON 13/07/2015 12:36:32
#448750
FFCOUTO,

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!
JABA 13/07/2015 12:36:33
#448751
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;
POCE1DON 13/07/2015 12:39:58
#448752
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.
JABA 13/07/2015 12:43:49
#448753
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;
POCE1DON 13/07/2015 13:02:22
#448754
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?
JABA 13/07/2015 13:18:08
#448755
O que não estou entendendo na consulta dele é essa parte: v1.codVenda = v.codCadastro. Isso realmente tá correto?
Página 3 de 4 [40 registro(s)]
Tópico encerrado , respostas não são mais permitidas