BeteMaciel Postado 10 de Maio de 2011 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 Denunciar Compartilhar Postado 10 de Maio de 2011 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') Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Excluído Postado 10 de Maio de 2011 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 Denunciar Compartilhar Postado 10 de Maio de 2011 BeteMaciel, use a função MTDATA. Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Rogério Naressi Postado 10 de Maio de 2011 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 Denunciar Compartilhar Postado 10 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Frederico Postado 10 de Maio de 2011 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 Denunciar Compartilhar Postado 10 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
markitu Postado 11 de Maio de 2011 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 Denunciar Compartilhar Postado 11 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
BeteMaciel Postado 11 de Maio de 2011 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 Autor Denunciar Compartilhar Postado 11 de Maio de 2011 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!! Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Frederico Postado 11 de Maio de 2011 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 Denunciar Compartilhar Postado 11 de Maio de 2011 Não deu certo!! Quando executado a consulta o que foi retornado: Erro ou vazio? []'s Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
BeteMaciel Postado 11 de Maio de 2011 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 Autor Denunciar Compartilhar Postado 11 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Frederico Postado 11 de Maio de 2011 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 Denunciar Compartilhar Postado 11 de Maio de 2011 (editado) 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 11 de Maio de 2011 por Frederico Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
BeteMaciel Postado 11 de Maio de 2011 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 Autor Denunciar Compartilhar Postado 11 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Andrea Reis Postado 12 de Maio de 2011 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 Denunciar Compartilhar Postado 12 de Maio de 2011 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 Citar Link para comentar Compartilhar em outros sites Mais opções de compartilhamento...
Posts Recomendados
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.