Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

bsalvador

Otimizar Consulta SQL

Recommended Posts

Olá Pessoal,

 

Estou utilizando o SQL Server 2005 e tenho o seguinte caso:

 

Quero reaproveitar a mesma query para executar duas consultas diferentes. A primeira possui na cláusula where o campo val_realizado_item is not null e a segunda possui o campo val_acumulado_item is not null, no mais elas são idênticas, ou seja, possuem os mesmos joins, os mesmos campos no select. Esse select retorna o maior_ano e maior_mes para cada variável desta. Alguém tem alguma idéia de como eu poderia fazer essa consulta? Não queria ter que executar a mesma query novamente somente por causa de uma cláusula where.

O resultset precisaria ter o seguinte retorno:

 

2008 6 2009 7

 

onde:

 

2008 = ano do maior val_realizado_item

6 = mes do maior val_realizado_item

2009 = ano do maior val_acumulado_item

7 = mes do mair val_acumulado_item

 

Agradeço desde já se alguém puder me ajudar neste desafio.

 

[]

 

Sabrina

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá..agradeço o retorno.

 

No exemplo que você repassou ele substitui o valor da variável. Na verdade eu gostaria de substituir a variável.

Abaixo um exemplo prático do que gostaria de fazer. Tenho na cláusula where a variável "cod_indicador is not null"

 

select isnull(val_acumulado_item, 0) as VALOR, 0 as min, 0 as max

,isnull(cast(val_acumulado_item as varchar(10)), 'nulo') as fl_valor_ponteiro

from valor_realizado_indicador v

join faixa_variacao_frequencia f on (f.cod_faixa_variacao_frequencia = v.cod_faixa_variacao_frequencia)

join LIBERACAO_ANO l on (l.COD_ANO = f.COD_ANO)

where l.dsc_ano = 2008

and ind_periodicidade = 1

and cod_painel = 1

and cod_indicador is not null

 

Gostaria de utilizar a mesma query para ora comparar cod_indicador, ora comparar "cod_mensagem is not null" sem ter que executar a mesma query novamente apenas por causa de uma variável que estou comparando.

 

select isnull(val_acumulado_item, 0) as VALOR, 0 as min, 0 as max

,isnull(cast(val_acumulado_item as varchar(10)), 'nulo') as fl_valor_ponteiro

from valor_realizado_indicador v

join faixa_variacao_frequencia f on (f.cod_faixa_variacao_frequencia = v.cod_faixa_variacao_frequencia)

join LIBERACAO_ANO l on (l.COD_ANO = f.COD_ANO)

where l.dsc_ano = 2008

and ind_periodicidade = 1

and cod_painel = 1

and cod_mensagem is not null

 

Será que é possível?

 

Agradeço desde já!

 

[]

 

Sabrina

Compartilhar este post


Link para o post
Compartilhar em outros sites

utilize uma variável para o filtro que da certo, ex.:

declare @Filtro bit --> 0-Filtra por cod_indicador, 1-Filtra por cod_mensagem

set @Filtro = 1

select isnull(val_acumulado_item, 0) as VALOR, 0 as min, 0 as max
,isnull(cast(val_acumulado_item as varchar(10)), 'nulo') as fl_valor_ponteiro
from valor_realizado_indicador v
join faixa_variacao_frequencia f on (f.cod_faixa_variacao_frequencia = v.cod_faixa_variacao_frequencia)
join LIBERACAO_ANO l on (l.COD_ANO = f.COD_ANO) 
where l.dsc_ano = 2008
and ind_periodicidade = 1 
and cod_painel = 1
and (
	(@Filtro = 0 and cod_indicador is not null)
	or 
	(@Filtro = 1 and cod_mensagem is not null)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.