Subselect no firebird
18/04/2021
0
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.
José Oquendo
Posts
18/04/2021
Emerson Nascimento
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
18/04/2021
José Oquendo
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.
19/04/2021
Emerson Nascimento
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
19/04/2021
José Oquendo
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.
Clique aqui para fazer login e interagir na Comunidade :)