DUVIDA EM CONSULTA SQL

WEBIER 22/01/2011 13:15:31
#363086
tenho a seguinte 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 ?
KAIBOLL 22/01/2011 14:04:24
#363087
Resposta escolhida
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[Ô]
WEBIER 22/01/2011 14:22:45
#363090
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
KAIBOLL 22/01/2011 14:31:32
#363091
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
WEBIER 22/01/2011 14:36:37
#363092
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?
KAIBOLL 22/01/2011 15:08:51
#363095
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

ESLEYSANCHES 22/01/2011 15:24:40
#363096
Citação:

PENSE NUMA SQL QUE TA ME DEIXANDO DOIDO


kkkkkkkkkkkkkkkkkkkkkkkk
WEBIER 22/01/2011 18:55:47
#363110
bom, eu nao entendi pq vc colocou WHERE COD_PRODUTO=100 pois se quero todos os produtos, entao fiz assim:

        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
JESUEL.OLIVEIRA 23/01/2011 00:10:07
#363130
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

JWCELYO 23/01/2011 10:47:11
#363141
talvez de para fazer isto com (string tabela1) UNION (string tabela2) , mas sem as tabelas aqui para nos testa fica difícil.
WEBIER 23/01/2011 11:28:57
#363142
segue banco de dados com as tabelas: PEDIDO_ITENS e PRODUTOS_ENTRADA_ITENS mencionadas na SQL

Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas