Ir para conteúdo
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×
Quer acesso a todas as Áreas do Fórum, até aquelas só para membros VIPs? Também quer poder baixar qualquer ARQUIVO? ×

SELECT MES E ANO ANTERIOR


Posts Recomendados


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  80
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Quero trazer o valor do movimento do mês anterior, fiz esta select e deu certo, mas quando é o mês 1 não da mais certo.

Preciso tratar quando o mês (1)-1 = 0 pra 12 e quando muda o ano também.

SELECT SUM(TITMMOV.PRECOUNITARIO * TITMMOV.QUANTIDADE) AS VALOR

FROM TMOV, TITMMOV, TPRD, FCFO

WHERE

TMOV.CODCOLIGADA = TITMMOV.CODCOLIGADA

AND TMOV.IDMOV = TITMMOV.IDMOV

AND TITMMOV.CODCOLIGADA = TPRD.CODCOLIGADA

AND TITMMOV.IDPRD = TPRD.IDPRD

AND TMOV.CODCOLIGADA = FCFO.CODCOLIGADA

AND TMOV.CODCFO = FCFO.CODCFO

AND TMOV.[sTATUS] <> 'C'

AND TPRD.CODIGOPRD = '6.07.0003'

AND TMOV.CODCOLIGADA = 1

AND TMOV.CODFILIAL = 1

AND TMOV.CODTMV = '1.1.26'

AND TMOV.CODCFO = 'F00000131'

AND TMOV.CODCCUSTO = '01.901000.0090.0000'

AND YEAR(TMOV.DATAEMISSAO) = 2011

AND MONTH(TMOV.DATAEMISSAO) = (4)-1

AND TMOV.CODTB1FLX IN ('1.25.01','1.28.13','1.28.20','1.28.21','1.31.01','1.31.02')

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  68
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  997
  • Conteúdo/Dia:  0.15
  • Reputação:   4
  • Pontos/Conquistas:  5.604
  • Conteúdo Resolvido:  0
  • Dias Ganho:  5
  • Status:  Offline
  • Idade:  51

BeteMaciel, use a função MTDATA.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  34
  • Tópicos/Dia:  0.01
  • Meu Conteúdo:  187
  • Conteúdo/Dia:  0.03
  • Reputação:   4
  • Pontos/Conquistas:  1.306
  • Conteúdo Resolvido:  0
  • Dias Ganho:  4
  • Status:  Offline
  • Idade:  52

BeteMaciel,

Eu uso a "gambiarra" abaixo, apesar de estra funciona:

and year(dataemissao)=(select top 1 case when :vcto_mes_n = 1 then :vcto_ano_n -1 else :vcto_ano_n end as x from gcoligada)

and month(dataemissao)=(select top 1 case when :vcto_mes_n = 1 then 12 else :vcto_mes_n -1 end as x from gcoligada)

Ajuste a sua necessidade.

Rogério

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Bete,

Você também pode usar dessa forma eliminando necessidade de ter dois parâmetros.

and year(dataemissao)= case when :vcto_mes_n = 1 then (year(:vcto_mes_n)-1) else year(:vcto_mes_n)

and month(dataemissao)= case when month(:vcto_mes_n) = 1 then 12 else :vcto_mes_n end

[]'s

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  110
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.391
  • Conteúdo/Dia:  0.21
  • Reputação:   17
  • Pontos/Conquistas:  8.047
  • Conteúdo Resolvido:  0
  • Dias Ganho:  9
  • Status:  Offline
  • Idade:  47
  • Dispositivo:  Windows

MOVIDO PARA A ÁREA: Fórum RM > RM Sistemas > [RM] SQL e Bancos de Dados

Sua mensagem foi movida para a área correta, pois foi postada em local errado.

Agradecemos o seu post, mas por favor, verifique melhor em qual lugar postar para que as coisas fiquem em ordem por aqui, ok ?

Qualquer problema ou dúvida contate-nos enviando uma PM ( MP - Mensagem Privada ) ou email (se estiver disponível).

Se preferir, faça um post com a sua dúvida ou problema.

Contamos com a sua compreensão e colaboração.

Muito obrigado.

Equipe Fórum RM

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  80
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Bete,

Você também pode usar dessa forma eliminando necessidade de ter dois parâmetros.

and year(dataemissao)= case when :vcto_mes_n = 1 then (year(:vcto_mes_n)-1) else year(:vcto_mes_n)

and month(dataemissao)= case when month(:vcto_mes_n) = 1 then 12 else :vcto_mes_n end

[]'s

Não deu certo!!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Não deu certo!!

Quando executado a consulta o que foi retornado: Erro ou vazio?

[]'s

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  80
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Quando executado a consulta o que foi retornado: Erro ou vazio?

[]'s

Isso mesmo. Mas existe um valor para este período que seria 12/2010

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  1.140
  • Conteúdo/Dia:  0.21
  • Reputação:   60
  • Pontos/Conquistas:  6.161
  • Conteúdo Resolvido:  0
  • Dias Ganho:  33
  • Status:  Offline
  • Idade:  42
  • Dispositivo:  Windows

Isso mesmo. Mas existe um valor para este período que seria 12/2010

Ah tá o seu parâmetro é 12/2010, então por isso que dessa forma que passei não funciona, ai podemos fazer da seguinte forma:

and year(dataemissao)= case when SUBSTRING(:vcto_mes_n ,1,CHARINDEX('/', :vcto_mes_n)-1 = 1 then SUBSTRING(:vcto_mes_n ,CHARINDEX('/', :vcto_mes_n)+1,LEN(:vcto_mes_n))-1 else SUBSTRING(:vcto_mes_n ,CHARINDEX('/', :vcto_mes_n)+1,LEN(:vcto_mes_n))

and month(dataemissao)= case when SUBSTRING(:vcto_mes_n ,1,CHARINDEX('/', :vcto_mes_n)-1) = 1 then 12 else SUBSTRING(:vcto_mes_n ,1,CHARINDEX('/', :vcto_mes_n)-1) end

Para entender o que foi feito tem um exemplo abaixo que você pode colocar no query e ver o resultado:

SELECT '12/2010', CHARINDEX('/','12/2010'), SUBSTRING('1/2010',CHARINDEX('/','1/2010')+1,LEN('12/2010'))

[]'s

Editado por Frederico
Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  3
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  11
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  80
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Quando faço a pesquisa do valor no mês 03 de 2011 por exemplo, retorna o valor do mês 02 de 2011

Mas quando faço no mês 01 de 2011 retorna nulo e deveria retornar o valor do mês 12 de 2010.

Pq tá fazendo a subtração (1)- 1 = 0 e não existe

É isso que não estou conseguindo.

Os parametros são mês e ano separados mesmo como na primeira opção que vc me enviou.

Veja por favor se estou fazendo da maneira correta:

AND YEAR(TMOV.DATAEMISSAO) = CASE WHEN YEAR(:ESPELHO#37) = 1 THEN (YEAR(:ESPELHO#37)-1) ELSE YEAR(:ESPELHO#37)END

AND MONTH(TMOV.DATAEMISSAO) = CASE WHEN MONTH(:ESPELHO#36) = 1 THEN 12 ELSE MONTH(:ESPELHO#36) END

ou

AND YEAR(TMOV.DATAEMISSAO) = CASE WHEN YEAR(TMOV.DATAEMISSAO) = 1 THEN (YEAR(TMOV.DATAEMISSAO)-1) ELSE YEAR(TMOV.DATAEMISSAO)END

AND MONTH(TMOV.DATAEMISSAO) = CASE WHEN MONTH(TMOV.DATAEMISSAO) = 1 THEN 12 ELSE MONTH(TMOV.DATAEMISSAO) END

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  11
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  186
  • Conteúdo/Dia:  0.03
  • Reputação:   0
  • Pontos/Conquistas:  1.035
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline
  • Idade:  37

Bete tente da seguinte forma

AND month(TMOV.DATAEMISSAO) = month(DATEADD(month,-1,'2010-01-19 00:00:00.000'))

AND year(TMOV.DATAEMISSAO) = year(DATEADD(month,-1,'2010-01-19 00:00:00.000'))

sendo que: '2010-12-19 00:00:00.000' vai ser o parâmetro do seu relatório...

o que foi que eu fiz...a função DATEADD funciona da seguinte forma DATEADD(período,valor a ser somado, data para somar) onde:

período pode ser DIA (DD,DAY), MES (MONTH, MM) OU ANO (YEAR, YY,YYYY)..bem como minutos etc

valor a ser somado no caso -1 ele vai diminuir 1 período

data é obviamente a data q vc quer somar/diminuir

Quando eu peço p ele diminuir 1 mes de 01/2010 ele sabe que é 12/2009

ai basta comparar o mes dessa diminuiacao com seu filtro....

espero ter ajudado

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.