Cálculo de datas com condições em SQL
Olá pessoal!
Descobri que pelo DATEDIFF consigo fazer cálculo de datas no SQL para que eu possa utilizar esse resultado numa multiplicação pelo valor da diária, mas verifiquei que no banco de dados as diárias mudam de valores em determinadas datas.
Poderiam me ajudar como fazer o cálculo?
No meu banco de dados existem as seguintes colunas: DATAENTRADA, DATASAIDA, VALORDIARIA, DIARIA2, DIARIA3, INICIODIARIA2, INICIODIARIA3, VALORDIARIA2, VALORDIARIA3.
As colunas 'DIARIA2' e 'DIARIA3' armazenam apenas strings 'N' ou 'S'.
Caso as duas colunas estejam com o valor 'N' fica fácil porque é só calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'DATASAIDA'.
Caso a coluna 'DIARIA2' esteja com o valor 'S' é preciso calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'INICIODIARIA2' + o valor da coluna 'DIARIA2' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA2' e 'DATASAIDA'.
Caso as colunas 'DIARIA2' e 'DIARIA3' estejam com o valor 'S' é preciso calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'INICIODIARIA2' + o valor da coluna 'DIARIA2' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA2' e 'INICIODIARIA3' + o valor da coluna 'DIARIA3' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA3' e 'DATASAIDA'.
Tenho uma boa noção de lógica de programação, mas ainda não sei como utilizar 'IF' e 'ELSE' no SQL.
Desde já agradeço.
Descobri que pelo DATEDIFF consigo fazer cálculo de datas no SQL para que eu possa utilizar esse resultado numa multiplicação pelo valor da diária, mas verifiquei que no banco de dados as diárias mudam de valores em determinadas datas.
Poderiam me ajudar como fazer o cálculo?
No meu banco de dados existem as seguintes colunas: DATAENTRADA, DATASAIDA, VALORDIARIA, DIARIA2, DIARIA3, INICIODIARIA2, INICIODIARIA3, VALORDIARIA2, VALORDIARIA3.
As colunas 'DIARIA2' e 'DIARIA3' armazenam apenas strings 'N' ou 'S'.
Caso as duas colunas estejam com o valor 'N' fica fácil porque é só calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'DATASAIDA'.
Caso a coluna 'DIARIA2' esteja com o valor 'S' é preciso calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'INICIODIARIA2' + o valor da coluna 'DIARIA2' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA2' e 'DATASAIDA'.
Caso as colunas 'DIARIA2' e 'DIARIA3' estejam com o valor 'S' é preciso calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'INICIODIARIA2' + o valor da coluna 'DIARIA2' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA2' e 'INICIODIARIA3' + o valor da coluna 'DIARIA3' multiplicado pelo resultado da diferença de dias entre 'INICIODIARIA3' e 'DATASAIDA'.
Tenho uma boa noção de lógica de programação, mas ainda não sei como utilizar 'IF' e 'ELSE' no SQL.
Desde já agradeço.
Laércio Lopes
Curtidas 0
Melhor post
Soeuseijothaz
05/02/2015
Não existe'IF' e 'ELSE' no SQL.
Você terá de usa: CASE.
https://msdn.microsoft.com/pt-br/library/ms181765.aspx
http://stackoverflow.com/questions/5487892/sql-server-case-when-or-then-else-end-the-or-is-not-supported
Você terá de usa: CASE.
https://msdn.microsoft.com/pt-br/library/ms181765.aspx
http://stackoverflow.com/questions/5487892/sql-server-case-when-or-then-else-end-the-or-is-not-supported
GOSTEI 1
Mais Respostas
Laércio Lopes
05/02/2015
Pessoal alguém poderia me ajudar fazendo essa query? Ainda não consegui fazer utilizando a CASE.
GOSTEI 0
Renato Rubinho
05/02/2015
Buenas,
Você já criou toda a lógica no seu exemplo, basta "traduzir"... rsrs
1. Primeira parte
Você já criou toda a lógica no seu exemplo, basta "traduzir"... rsrs
1. Primeira parte
//Caso as duas colunas estejam com o valor 'N' fica fácil porque é só calcular o valor da coluna 'VALORDIARIA' multiplicado pelo resultado da diferença de dias entre 'DATAENTRADA' e 'DATASAIDA'. SELECT CASE WHEN DIARIA2 = 'N' AND DIARIA3 = 'N' THEN VALORDIARIA * DATAENTRADA - DATASAIDA ELSE // SEGUIR COM AS DEMAIS CONDICOES DENTRO DESTA EXCEÇÃO END; FROM . . .
GOSTEI 0
Laércio Lopes
05/02/2015
Muito obrigado rrubinho, consegui fazer o relatório.
:)
:)
GOSTEI 0