erro user name required

12/01/2018

olá estou tentando agrupar uma consulta sql mais da erro user name required

segue codigo:

select
itensvenda.codmerc,
itensvenda.preco,
itensvenda.quant, SUM(Quant) AS quant,
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra,
venda.codigo,
venda.total,
venda.data


from itensvenda,

venda,
produtos






where
(
(produtos.codigo = itensvenda.codmerc )


and
(venda.codigo = itensvenda.codvenda)

and
(venda.NomeOpera<>''''ORCAMENTO'''')

and
(venda.data between :vardatai and :vardataf)

)


group by itensvenda.codmerc
order by venda.data desc


se eu tirar o group by e SUM(Quant) AS quant funciona perfeitamente

Tiago Mendes

Melhor resposta

13/01/2018

select 
itensvenda.codmerc,
itensvenda.preco,
itensvenda.quant, SUM(Quant) AS quant,
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data
from itensvenda, venda, produtos
where produtos.codigo = itensvenda.codmerc 
and venda.codigo = itensvenda.codvenda
and venda.NomeOpera<>''''ORCAMENTO''''
and venda.data between :vardatai and :vardataf

group by itensvenda.codmerc,
itensvenda.codmerc,
itensvenda.preco, 
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data 
/* Aqui voce tem que colocar, por quais campos você esta agrupando, você tem que colocar todos campos da cláusala select excepto pelo campo que vc esta somando  */
order by venda.data desc


O Sum vai somar todos os registros do seu resultado por isso vc precisa indicar que esta agrupando as demais colunas. Retornando apenas uma linha.

se oque quer é somar tudo e exibir na linha retornando as demais precisa usar uma subquery como esse exemplo abaixo:
select 
itensvenda.codmerc,
itensvenda.preco,
(select itensvenda.quant, SUM(Quant) from itensvenda where  itensvenda.codvenda = venda.codigo )  as  quant,
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data
from itensvenda, venda, produtos
where produtos.codigo = itensvenda.codmerc 
and venda.codigo = itensvenda.codvenda
and venda.NomeOpera<>''''ORCAMENTO''''
and venda.data between :vardatai and :vardataf

order by venda.data desc

assim não precisará utilizar o group by na consulta.
Mas te indico fortemente utilizar uma outra consultar para obter este resultado já que você provavelmente vai utiliza-la em um header de pedido ou algo assim.
Espero ter ajudado.

Vinícius

Currículo
Responder Citar

Outras Respostas

13/01/2018

Vinícius Currículo

select
itensvenda.codmerc,
itensvenda.preco,
(select  SUM(Quant) from itensvenda where  itensvenda.codvenda = venda.codigo )  as  quant,
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data
from itensvenda, venda, produtos
where produtos.codigo = itensvenda.codmerc 
and venda.codigo = itensvenda.codvenda
and venda.NomeOpera<>''''ORCAMENTO''''
and venda.data between :vardatai and :vardataf
 
order by venda.data desc


*Correção
Responder Citar

16/01/2018

Tiago Mendes

Vinicius muito obrigado os dois sql s funcionam perfeitamente e geram o mesmo resultado e foi resolvido o problema de user name requerid pois tenho que informar todos os campos (essa parte que nao sabia), mais nao traz o resultado esperado o agrupamento das mercadorias e somando as quantidades sabe o que eu fiz de errado?
seque sql

select
itensvenda.codmerc,
itensvenda.preco,
itensvenda.quant, SUM(Quant) AS quant,
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data
from itensvenda, venda, produtos
where produtos.codigo = itensvenda.codmerc 
and venda.codigo = itensvenda.codvenda
and venda.NomeOpera<>''ORCAMENTO''
and venda.data between :vardatai and :vardataf
 
group by itensvenda.codmerc,
itensvenda.quant,
itensvenda.preco, 
itensvenda.codvenda,
produtos.codigo,
produtos.nome,
produtos.unidade,
produtos.referencia,
produtos.precocompra, 
venda.codigo,
venda.total,
venda.data
/* Aqui voce tem que colocar, por quais campos você esta agrupando, você tem que colocar todos campos da cláusala select excepto pelo campo que vc esta somando  */
order by venda.data desc


gera esse resultado: https://drive.google.com/open?id=1c-Yf5jJzgCX9sGYXLxmrANhPv5HgQSQF


acho que partindo do principio mais filtrando por data e especificando o nome do produto este sql :

select itensvenda.codmerc , SUM(Quant) AS quant
from itensvenda

group BY codmerc



gera esse resultado: https://drive.google.com/open?id=117C7Ct7QwyqyqGH82cSKfOoofPNZ_1CF
Responder Citar