select com mais dois select

25/10/2019

13

Bom dia programadores,
estou tentando aplicar um select dentro de outro select
preciso saber o que o maquinário teve de lucro e despesa no periodo para trazer em uma só
estou aplicando assim, mas obtenho o erro de não ter a mesma quantidade de colunas e variaveis.

select c.cdveiculo, v.descricao,
(select sum(c.valor_pago) Valor_Pago_Credito, sum(c.valor - c.valor_pago) Devido_Credito, sum(c.valor) Total_Credito from caixa c where c.tipo = ''C''),
(select sum(c.valor_pago) Valor_Pago_Debito, sum(c.valor - c.valor_pago) Devido_Debito, sum(c.valor) Total_Debito from caixa c where c.tipo = ''D'')
from caixa c left join veiculo v on (c.cdveiculo=v.cdveiculo)
group by 1, 2
Responder

Post mais votado

25/10/2019

Bom dia programadores,
estou tentando aplicar um select dentro de outro select
preciso saber o que o maquinário teve de lucro e despesa no periodo para trazer em uma só
estou aplicando assim, mas obtenho o erro de não ter a mesma quantidade de colunas e variaveis.

select c.cdveiculo, v.descricao,
(select sum(c.valor_pago) Valor_Pago_Credito, sum(c.valor - c.valor_pago) Devido_Credito, sum(c.valor) Total_Credito from caixa c where c.tipo = ''C''),
(select sum(c.valor_pago) Valor_Pago_Debito, sum(c.valor - c.valor_pago) Devido_Debito, sum(c.valor) Total_Debito from caixa c where c.tipo = ''D'')
from caixa c left join veiculo v on (c.cdveiculo=v.cdveiculo)
group by 1, 2


Como as suas subquery estão presentes nos parametros, elas devem ser select de apenas um valor! No seu caso acredito que seja desnecessário utilizar eles ja que pode fazer mais ou menos da seguinte forma:
select c.cdveiculo, v.descricao, sum(c.valor_pago) Valor_Pago_Credito, sum(c.valor - c.valor_pago) Devido_Credito, sum(c.valor) Total_Credito,
from caixa c left join veiculo v on (c.cdveiculo=v.cdveiculo)
where c.tipo = "C" OR c.tipo = "D"
group by 1, 2

Acredito que seu group by deve ser feito sobre c.cdveiculo...
Responder

Mais Posts

25/10/2019

Marcio

Pedro Alonso,
dessa forma que me deu de exemplo funciona mas gostaria de apresentar na mesma linha mas os valores separados o que é crédito e débito.

exemplo veiculo 1 credito_pago 1500, credito_devido 3500, Total_Credito 5000, Debito_pago 1500, Debito_devido 3500, Debito_Total 5000.

tentei o union

select c.cdVeiculo, v.descricao,
sum(c.valor_pago) Valor_Pago, sum(c.valor - c.valor_pago) Devido, sum(c.valor) Total
from caixa c left join veiculo v on (c.cdveiculo=v.cdveiculo)
where c.tipo = 'C'
group by 1,2
union
select c.cdVeiculo, v.descricao,
sum(c.valor_pago) Valor_Pago, sum(c.valor - c.valor_pago) Devido, sum(c.valor) Total
from caixa c left join veiculo v on (c.cdveiculo=v.cdveiculo)
where c.tipo = 'D'
group by 1,2


mas ele apresenta os Créditos em uma linha e Débitos na linha de baixo
Responder
faça algo assim:
select
	c.cdVeiculo,
	v.descricao,

	sum(case when c.tipo = 'C' then c.valor_pago else 0 end) Valor_C_Pago,
	sum(case when c.tipo = 'C' then c.valor - c.valor_pago else 0 end) Valor_C_Devido,
	sum(case when c.tipo = 'C' then c.valor else 0 end) Valor_C_Total,

	sum(case when c.tipo = 'D' then c.valor_pago else 0 end) Valor_D_Pago,
	sum(case when c.tipo = 'D' then c.valor - c.valor_pago else 0 end) Valor_D_Devido,
	sum(case when c.tipo = 'D' then c.valor else 0 end) Valor_D_Total

from
	caixa c
left join
	veiculo v on (v.cdveiculo = c.cdveiculo)
group by
	c.cdVeiculo,
	v.descricao

Responder

25/10/2019

Marcio

Top, o que eu precisava,
mto obrigado Emerson nascimento.
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