select com mais dois select

SQL

Delphi

Banco de Dados

IBExpert

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
Marcio

Marcio

Curtidas 0

Melhor post

Pedro Alonso

Pedro Alonso

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...
GOSTEI 1

Mais Respostas

Marcio

Marcio

25/10/2019

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
GOSTEI 0
Emerson Nascimento

Emerson Nascimento

25/10/2019

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

GOSTEI 1
Marcio

Marcio

25/10/2019

Top, o que eu precisava,
mto obrigado Emerson nascimento.
GOSTEI 0
POSTAR