[Ajuda Select] Orcamento X Realizado X Desvio

SQL

SELECT

08/12/2020

Boa tarde estimados amigo.
Venho novamente pedir uma ajuda.
Tenho uma tabela com nome orçamento com os seguintes campos
Tipo | Ano | Mes | Numero_Conta | Valor_Conta
No campo Tipo poderá ser > O para Orçado e R Para Realizado. Ficando assim no banco.
Tipo | Ano | Mes | Numero_Conta | Valor_Conta
O 2021 JAN 123 350,00
O 2021 JAN 456 100,00
R 2021 JAN 123 100,00
R 2021 JAN 456 150,00
O 2021 JAN 123 350,00
R 2021 JAN 123 200,00


E Assim por diante...
preciso de uma select que me traga na :
Primeira Linha o Valor Orçado da Conta
Segunda Linha o valor Realiza
Terceira Linha o Desvio (Orçado - Realizado) daquela conta.

Ficando assim

Tipo o resultado do select
Numero_Conta | Tipo | Ano | Mes | Valor
123 O 2021 JAN 350,00
123 R 2021 JAN 100,00
123 D 2021 JAN 150,00
E Assim por diante. (Varios meses do ano e varios numeros de conta.

Seria possível ajudar-me .... pois não estou conseguindo.


antecipo a todos cordial agradecimentos por ajudar-me.
Mauricio Gabriel

Mauricio Gabriel

Curtidas 0

Melhor post

Jair N.

Jair N.

09/12/2020

Bom Dia tudo está na "ordenação" então :
1ªordem é a sua conta;
2ª ordem será Ano e Mês,
3ª Ordem tu deverá criar uma situação para que seja informado
1.1) o tipo "O" Orçado
1.2) o tipo "R" Realizado
1.3) o tipo "D" Desvio;
Neste caso costumo eu utilizar o "CASE". Exemplo CASE tipo WHEN "O" THEN 1 WHEN "R" THEN 2 WHEN "D" THEN 4 AS ordem_tipo.
Ficando assim ORDER BY, numero_conta, ano, mes, ordem_tipo.
GOSTEI 1

Mais Respostas

Emerson Nascimento

Emerson Nascimento

08/12/2020

bom.... primeiro que o exemplo passado está errado, né?
se foi orçado o valor de 350 e realizado 100, o desvio seria de 250, certo?

sugestão: não funciona melhor se você puser em colunas? algo assim:
select
	numero_conta, ano, mes, orcado, realizado, (orcado - realizado) desvio
from
(
	select
		numero_conta, ano, mes,
		sum(case when tipo = 'O' then valor_conta else 0 end) orcado,
		sum(case when tipo = 'R' then valor_conta else 0 end) realizado
	from
		orcamento
	[where]
	group by
		numero_conta, ano, mes
) t
GOSTEI 1
Mauricio Gabriel

Mauricio Gabriel

08/12/2020

Bom Dia tudo está na "ordenação" então :
1ªordem é a sua conta;
2ª ordem será Ano e Mês,
3ª Ordem tu deverá criar uma situação para que seja informado
1.1) o tipo "O" Orçado
1.2) o tipo "R" Realizado
1.3) o tipo "D" Desvio;
Neste caso costumo eu utilizar o "CASE". Exemplo CASE tipo WHEN "O" THEN 1 WHEN "R" THEN 2 WHEN "D" THEN 4 AS ordem_tipo.
Ficando assim ORDER BY, numero_conta, ano, mes, ordem_tipo.


Boa tarde

Jair Obrigado por responder-me ... seria possível ajudar-me neste select como um exemplo por favor ... sou iniciante em select ... se puder ajudar-me eu agradeço desde já.
GOSTEI 0
Mauricio Gabriel

Mauricio Gabriel

08/12/2020

bom.... primeiro que o exemplo passado está errado, né?
se foi orçado o valor de 350 e realizado 100, o desvio seria de 250, certo?

sugestão: não funciona melhor se você puser em colunas? algo assim:
select
	numero_conta, ano, mes, orcado, realizado, (orcado - realizado) desvio
from
(
	select
		numero_conta, ano, mes,
		sum(case when tipo = 'O' then valor_conta else 0 end) orcado,
		sum(case when tipo = 'R' then valor_conta else 0 end) realizado
	from
		orcamento
	[where]
	group by
		numero_conta, ano, mes
) t


Boa tarde !!! Isso mesmo , o valor esta errado , erro de digitação , tentei corrigir , mas não entrei como fazer isso ...
Muito obrigado pelo exemplo , vou tê-lo como material didatico para aumetar o conhecimento que tenho , e poder ajudar outros como fez comigo ... Muito agradeçido ...
GOSTEI 0
Jair N.

Jair N.

08/12/2020

Boa Tarde simples

SELECT numero_conta, tipo, ano, mes, valor
, CASE tipo WHEN ''O'' THEN 1 WHEN ''R'' THEN 2 WHEN ''D'' THEN 3 ELSE 0 END AS tipo_ordem
FROM <sua tabela>
ORDER BY numero_conta, ano, mes, tipo_ordem
GOSTEI 0
POSTAR