Subselect no firebird

18/04/2021

3

Bom dia,

tenho as seguintes tabelas:
produtos
codigo descricao tipo
1 prato 1
2 caderno 2
3 faca 1
4 lapis 2
5 borracha 2
6 colher 1
7 garfo 1
8 regua 2
9 caneta 2
10 tesoura 2

vendas
data codigoproduto valor
18/04/21 1 10
18/04/21 2 5
18/04/21 2 10
19/04/21 1 10
19/04/21 1 5
19/04/21 1 5
19/04/21 2 10

Estou suando o Firebird e preciso de uma cosulta que me retorne as quantidades de tipos por data da venda e o valor total por tipo. Tipo assim: dia 18/04/21 foram vendidos 1 produto do tipo 1 com valor total de 10 e 2 produtos do tipo 2 com valor de 15.

Agradeço antecipadamente a quem puder ajudar.
Responder

Posts

você não fez qualquer tentativa?

publique o que você fez e o resultado que obteve; e porque esse resultado não é satisfatório; etc.
assim você evita de receber como resposta algo que já tentou executar, poupando teu tempo e de quem quer te ajudar.

de qualquer modo, segue uma tentativa:
select
   v.data,
   p.tipo,
   sum(v.valor) valor
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data,
   p.tipo

Responder

18/04/2021

José Oquendo

você não fez qualquer tentativa?

publique o que você fez e o resultado que obteve; e porque esse resultado não é satisfatório; etc.
assim você evita de receber como resposta algo que já tentou executar, poupando teu tempo e de quem quer te ajudar.

de qualquer modo, segue uma tentativa:
select
   v.data,
   p.tipo,
   sum(v.valor) valor
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data,
   p.tipo



Fiz tentativa sim, mas, como não obtive exito, postei aqui.

a sql seria algo pareceido com isso:

select
   v.data,
   (select count(*) from produtos where p.codigo = v.produto and p.tipo = 1) as tipo_1,
   (select count(*) from produtos where p.codigo = v.produto and p.tipo = 2) as tipo_2,
   sum(v.valor)
from
   vendas v
inner join
   produtos p on p.codigo = v.produto
group by v.data,tipo_1,tipo_2


só q desta forma, nem executa.

Como disse na questão inicial, a ideia é q a sql retorne a quantidade de produtos por tipo vendido agrupados por data e por tipo.
Responder
se a resposta puder ser em linhas:
select
   v.data,
   p.tipo,
   count(p.codigo) qtd,
   sum(v.valor) valor
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data,
   p.tipo

para mostrar em colunas, a instrução abaixo funciona se houver somente 2 tipos:
select
   v.data,
   sum(case when p.tipo = 1 then 1 else 0 end) tipo1_qtd,
   sum(case when p.tipo = 1 then v.valor else 0 end) tipo1_valor1,
   sum(case when p.tipo = 2 then 1 else 0 end) tipo2_qtd,
   sum(case when p.tipo = 2 then v.valor else 0 end) tipo2_valor1
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data
Responder

19/04/2021

José Oquendo

se a resposta puder ser em linhas:
select
   v.data,
   p.tipo,
   count(p.codigo) qtd,
   sum(v.valor) valor
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data,
   p.tipo

para mostrar em colunas, a instrução abaixo funciona se houver somente 2 tipos:
select
   v.data,
   sum(case when p.tipo = 1 then 1 else 0 end) tipo1_qtd,
   sum(case when p.tipo = 1 then v.valor else 0 end) tipo1_valor1,
   sum(case when p.tipo = 2 then 1 else 0 end) tipo2_qtd,
   sum(case when p.tipo = 2 then v.valor else 0 end) tipo2_valor1
from
   vendas v
inner join
   produtos p on p.codigo = v.codigoproduto
group by
   v.data


a opção de mostra em colunas caiu como uma luva, muito obrigado.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários. Para saber mais sobre o uso de cookies,
consulte nossa política de privacidade. Ao continuar navegando em nosso site, você concorda com a nossa política.

Aceitar