DUVIDA EM CONSULTA SQL
tenho a seguinte SQL:
Ela agrupa todos os produtos vendidos em 1 mes e mostra a multiplicação da quantidade * preço = total
TUDO FUNCIONANDO!
ele mostra assim no grid:
DESCRICAO | PREÇO | QUANT | TOTAL |
------------------+-------------+-----------+------------+
[txt-color=#e80000]Arroz | 1,50 | 05 | 7,50 |
Feijão | 2,30 | 08 | 18,40 |[/txt-color]
esse 05 e 08 da quantidade é a soma de quantos de cada produto eu vendi num mês.
até ai tudo bem...
Agora meu cliente quer assim:
DESCRIÇÃO | PREÇO_CUSTO | PREÇO_VENDA | QUANT | TOTAL_CUSTO | TOTAL_VENDA | LUCRO% | LUCRO_RS
[txt-color=#e80000]Arroz | 0,90 | 1,50 | 05 | 4,50 | 7,50 | 40,00% | R$ 3,00[/txt-color]
os campos com o valor de custo e venda do produto está em outra tabela... chamada PRODUTOS_ENTRADA_ITENS
os campos chamam-se: CUSTO_COMPRA e VENDA
Toda vez que um produto chega, eu dou entrada nele no estoque... então tenho varios registros para um mesmo produto, sendo assim, tenho que pegar o ultimo registro daquele produto, pois ele é o que deu o valor de CUSTO_COMPRA e VENDA daquele produto, eu faço o select pelo campo CODIGO(autonumeração) da tabela PRODUTOS_ENTRADA_ITENS... sendo assim, o produto que tive o CODIGO maior, será a ultima entrada daquele produto.
Como faço essa SQL ?
SQL = [Ô]SELECT COD_PRODUTO, DESCRICAO, SUM(QUANTIDADE) AS var_Qtda, PRECO, SUM(PRECO * QUANTIDADE) AS var_Total FROM PEDIDOS_ITENS WHERE Month(DATA) = [Ô] & cboMES.ListIndex + 1 & [Ô] AND (Year(DATA) = [Ô] & cboAno & [Ô]) group by COD_PRODUTO, DESCRICAO, PRECO, QUANTIDADE ORDER BY DESCRICAO[Ô]
Ela agrupa todos os produtos vendidos em 1 mes e mostra a multiplicação da quantidade * preço = total
TUDO FUNCIONANDO!
ele mostra assim no grid:
DESCRICAO | PREÇO | QUANT | TOTAL |
------------------+-------------+-----------+------------+
[txt-color=#e80000]Arroz | 1,50 | 05 | 7,50 |
Feijão | 2,30 | 08 | 18,40 |[/txt-color]
esse 05 e 08 da quantidade é a soma de quantos de cada produto eu vendi num mês.
até ai tudo bem...
Agora meu cliente quer assim:
DESCRIÇÃO | PREÇO_CUSTO | PREÇO_VENDA | QUANT | TOTAL_CUSTO | TOTAL_VENDA | LUCRO% | LUCRO_RS
[txt-color=#e80000]Arroz | 0,90 | 1,50 | 05 | 4,50 | 7,50 | 40,00% | R$ 3,00[/txt-color]
os campos com o valor de custo e venda do produto está em outra tabela... chamada PRODUTOS_ENTRADA_ITENS
os campos chamam-se: CUSTO_COMPRA e VENDA
Toda vez que um produto chega, eu dou entrada nele no estoque... então tenho varios registros para um mesmo produto, sendo assim, tenho que pegar o ultimo registro daquele produto, pois ele é o que deu o valor de CUSTO_COMPRA e VENDA daquele produto, eu faço o select pelo campo CODIGO(autonumeração) da tabela PRODUTOS_ENTRADA_ITENS... sendo assim, o produto que tive o CODIGO maior, será a ultima entrada daquele produto.
Como faço essa SQL ?
SQL = [Ô]SELECT t1.COD_PRODUTO, t1.DESCRICAO, SUM(t1.QUANTIDADE) AS var_Qtda, t1.PRECO, SUM(t1.PRECO * t1.QUANTIDADE) AS var_Total, t2.COD_PRODUTO, MAX(t2.CUSTO_COMPRA), MAX(t2.VENDA) FROM PEDIDOS_ITENS as t1 INNER JOIN PRODUTOS_ENTRADA_ITENS as t2 ON t1.COD_PRODUTO=t2.COD_PRODUTO WHERE Month(DATA) = [Ô] & cboMES.ListIndex + 1 & [Ô] AND (Year(DATA) = [Ô] & cboAno & [Ô]) group by COD_PRODUTO, DESCRICAO, PRECO, QUANTIDADE ORDER BY DESCRICAO[Ô]
quando executei deu o erro dizendo:
Você tenrou executar uma consulta que não inclui a expressão DESCRICAO especificada como parte de uma função agregada
Você tenrou executar uma consulta que não inclui a expressão DESCRICAO especificada como parte de uma função agregada
acho que a funçao max num vai da certo, mas faz assim...da um select na tabela CUSTO_COMPRA e VENDA e pega os valores CUSTO_COMPRA e VENDA, lembrando que nao e o maior valor e simo ultimo valor incluido, ou seja o valor onde a data seja a ultima, armazena em varaveis e depois faz o select com a tabela PEDIDOS_ITENS
eu tambem tinha visto isso... dessa forma ai ele pegaria o maior CUSTO_COMPRA e VENDA... na verdade tenho que fazer 2 sql... uma embutida na outra:
select xxx, bbb, vvvv from dddd where (select ggg, ooo, pppp from xxxx where aaaa)
ou algo do genero!
Alguem pode me dar uma ajudinha ai?
select xxx, bbb, vvvv from dddd where (select ggg, ooo, pppp from xxxx where aaaa)
ou algo do genero!
Alguem pode me dar uma ajudinha ai?
SQL = [Ô]SELECT COD_PRODUTO, CUSTO_COMPRA, VENDA, MAX(DATA_ENTRADA) FROM PRODUTOS_ENTRADA_ITENS WHERE COD_PRODUTO=100
vc armazena essa consulta em variaveis (iCod,iCusto,iVenda)
SQL = [Ô]SELECT COD_PRODUTO, DESCRICAO, [Ô] & iCusto & [Ô] AS vlrCusto, [Ô] & iVenda & [Ô] AS vlrVenda,SUM(QUANTIDADE) AS var_Qtda, SUM(vlrCusto * var_Qtda) AS var_TotalCusto, SUM(vlrVenda * var_Qtda) AS var_TotalVenda, ((100)-((var_TotalCusto * 100) / var_TotalVenda)) as var_Procentagem, (var_TotalVenda - var_TotalCusto) as var_Lucro FROM PEDIDOS_ITENS WHERE Month(DATA) = [Ô] & cboMES.ListIndex + 1 & [Ô] AND (Year(DATA) = [Ô] & cboAno & [Ô]) group by COD_PRODUTO, DESCRICAO, PRECO, QUANTIDADE ORDER BY DESCRICAO[Ô]
kkkkk ficou um emaranhado da peste, mas tenta ai
flw
vc armazena essa consulta em variaveis (iCod,iCusto,iVenda)
SQL = [Ô]SELECT COD_PRODUTO, DESCRICAO, [Ô] & iCusto & [Ô] AS vlrCusto, [Ô] & iVenda & [Ô] AS vlrVenda,SUM(QUANTIDADE) AS var_Qtda, SUM(vlrCusto * var_Qtda) AS var_TotalCusto, SUM(vlrVenda * var_Qtda) AS var_TotalVenda, ((100)-((var_TotalCusto * 100) / var_TotalVenda)) as var_Procentagem, (var_TotalVenda - var_TotalCusto) as var_Lucro FROM PEDIDOS_ITENS WHERE Month(DATA) = [Ô] & cboMES.ListIndex + 1 & [Ô] AND (Year(DATA) = [Ô] & cboAno & [Ô]) group by COD_PRODUTO, DESCRICAO, PRECO, QUANTIDADE ORDER BY DESCRICAO[Ô]
kkkkk ficou um emaranhado da peste, mas tenta ai
flw
Citação:PENSE NUMA SQL QUE TA ME DEIXANDO DOIDO
kkkkkkkkkkkkkkkkkkkkkkkk
bom, eu nao entendi pq vc colocou WHERE COD_PRODUTO=100 pois se quero todos os produtos, entao fiz assim:
ai tá dando o erro:
Você tenrou executar uma consulta que não inclui a expressão CUSTO_COMPRA especificada como parte de uma função agregada
esse erro dar no primeiro SELECT
SQL = [Ô]SELECT CUSTO_COMPRA, VENDA, MAX(CODIGO_PRODUTO) FROM PRODUTOS_ENTRADA_ITENS[Ô]
Set RS = BD.OpenRecordset(SQL)
Dim iCod As Long
Dim iCusto As Currency
Dim iVenda As Currency
iCod = RS.Fields!CODIGO_PRODUTO
iCusto = RS.Fields!CUSTO_COMPRA
iVenda = RS.Fields!VENDA
SQL = [Ô]SELECT COD_PRODUTO, DESCRICAO, [Ô] & iCusto & [Ô] AS vlrCusto, [Ô] & iVenda & [Ô] AS vlrVenda,SUM(QUANTIDADE) AS var_Qtda, SUM(vlrCusto * var_Qtda) AS var_TotalCusto, SUM(vlrVenda * var_Qtda) AS var_TotalVenda, ((100)-((var_TotalCusto * 100) / var_TotalVenda)) as var_Procentagem, (var_TotalVenda - var_TotalCusto) as var_Lucro FROM PEDIDOS_ITENS WHERE Month(DATA) = [Ô] & cboMES.ListIndex + 1 & [Ô] AND (Year(DATA) = [Ô] & cboAno & [Ô]) group by COD_PRODUTO, DESCRICAO, PRECO, QUANTIDADE ORDER BY DESCRICAO[Ô]
Set RS = BD.OpenRecordset(SQL)
ai tá dando o erro:
Você tenrou executar uma consulta que não inclui a expressão CUSTO_COMPRA especificada como parte de uma função agregada
esse erro dar no primeiro SELECT
Amigo, vou lhe sugerir uma coisa que foge ao que você quer, pois na humilde opinião e analise você pode colocar estas informações diretamente na tabela de cada produto não qual a sua forma de trabalho mas com a variação de preço de custo, venda dos produto você não terá uma query consistente você soma a quantidade e pega o primeiro custo se houve variação no custo você terá que usar preço médio assim a soma dará resultado correto.
Abaixo preço médio do estoque mas pode se utilizar para venda.
- No estoque : 10 unidades
- Preço médio de custo: R$ 11,00
- Total do produto no estoque: R$ 110,00
- Entrando: 20 unidades
- Preço de custo dessa entrada: R$ 12,00
- Novo preco médio de custo = ((preco medio de custo anterior x Estoque Anterior) + (preco de custo dessa entrada * unidades que estao entrando) ) / (Quantidade no estoque depois da entrada)
Novo preco médio de custo = ((11 * 10) + (12 * 20)) / 30
Novo preco médio de custo = 11,667
Abaixo preço médio do estoque mas pode se utilizar para venda.
- No estoque : 10 unidades
- Preço médio de custo: R$ 11,00
- Total do produto no estoque: R$ 110,00
- Entrando: 20 unidades
- Preço de custo dessa entrada: R$ 12,00
- Novo preco médio de custo = ((preco medio de custo anterior x Estoque Anterior) + (preco de custo dessa entrada * unidades que estao entrando) ) / (Quantidade no estoque depois da entrada)
Novo preco médio de custo = ((11 * 10) + (12 * 20)) / 30
Novo preco médio de custo = 11,667
talvez de para fazer isto com (string tabela1) UNION (string tabela2) , mas sem as tabelas aqui para nos testa fica difÃcil.
segue banco de dados com as tabelas: PEDIDO_ITENS e PRODUTOS_ENTRADA_ITENS mencionadas na SQL
Tópico encerrado , respostas não são mais permitidas