Ir para conteúdo

POWERED BY:

Arquivado

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

Huel

Melhorar um código CASE

Recommended Posts

:unsure: Olá pessoal, fiz o seguinte código que está funcional, mas gostaria de melhorá-lo. É o seguinte tenho um valor de carga horária que é int e quando no banco ela for cadastrada como 0, no banco de dados aparecerá a mensagem: Valor Cadastrado Incorretamente, se não for 0, aparecerá o valor que está cadastrado no banco, relacionado à carga_horária.

A solução que eu encontrei foi:

 

DECLARE @mensagem VARCHAR(255)

DECLARE @cd_aluno INT

 

SET @mensagem = ''

SET @cd_aluno = $cod_aluno

 

SELECT @mensagem = @mensagem + (

CASE @mensagem

WHEN '' THEN '' ELSE ''

END

) +

(

CASE cur.carga_horaria

WHEN 0 THEN 'VALOR CADASTRADO INCORRETAMENTE'

WHEN 10 THEN '10'

WHEN 16 THEN '16'

WHEN 30 THEN '30'

WHEN 32 THEN '32'

WHEN 38 THEN '38'

WHEN 45 THEN '45'

WHEN 60 THEN '60'

WHEN 80 THEN '80'

WHEN 90 THEN '90'

WHEN 100 THEN '100'

WHEN 105 THEN '105'

WHEN 150 THEN '150'

WHEN 180 THEN '180'

WHEN 225 THEN '225'

WHEN 360 THEN '360'

WHEN 375 THEN '375'

WHEN 390 THEN '390'

WHEN 400 THEN '400'

WHEN 405 THEN '405'

WHEN 418 THEN '418'

WHEN 420 THEN '420'

WHEN 450 THEN '450'

WHEN 480 THEN '480'

WHEN 495 THEN '495'

WHEN 540 THEN '540'

WHEN 550 THEN '550'

WHEN 600 THEN '600'

WHEN 615 THEN '615'

WHEN 1728 THEN '1728'

WHEN 1920 THEN '1920'

WHEN 2000 THEN '2000'

WHEN 2412 THEN '2412'

WHEN 2420 THEN '2420'

WHEN 2628 THEN '2628'

WHEN 2800 THEN '2800'

WHEN 2824 THEN '2824'

WHEN 3020 THEN '3020'

WHEN 3098 THEN '3098'

WHEN 3120 THEN '3120'

WHEN 3190 THEN '3190'

WHEN 3212 THEN '3212'

WHEN 3224 THEN '3224'

WHEN 3260 THEN '3260'

WHEN 3292 THEN '3292'

WHEN 3300 THEN '3300'

WHEN 3672 THEN '3672'

WHEN 4050 THEN '4050'

WHEN 9999 THEN '9999'

END

)

 

FROM D5ECurso cur

INNER JOIN D5ETurma t ON t.cd_curso = cur.cd_curso

INNER JOIN D5EAluno a ON a.cd_turma = t.cd_turma

WHERE a.cd_aluno = $cod_aluno

 

SELECT TOP 1

UPPER(@mensagem) AS quantidade_horas

 

Como posso melhorar este código?

Agradeço desde já a ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Huel, quando você precisar fazer teste condicional, use o CASE da seguinte maneira:

 

CASE WHEN (cur.carga_horaria = 0)

THEN 'VALOR CADASTRADO INCORRETAMENTE'

ELSE CAST(cur.carga_horaria AS VARCHAR)

END

 

Quando precisar fazer teste condicional(=; >;<;>=; <=; <>) use desta maneira.

 

Espero ter te ajudado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Muito obrigada ulissesrafael.

Sua solução também funcionou.

A maneira que eu fiz foi a seguinte:

 

CASE cur.carga_horaria

WHEN 0 THEN 'VALOR CADASTRADO INCORRETAMENTE'

ELSE convert ( varchar,(COALESCE (cur.carga_horaria, 'NÃO INFORMADO NO CADASTRO')))

END

 

E as duas maneiras funcionaram direitinho. Valeu pela ajuda. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

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.