Inicial > Não categorizado > CASE + CTEs

CASE + CTEs

Aaa que beleza, Sexta-feira… o dia começa melhor… todo mundo feliz… porque será?

 

Mas vamos lá… aproveitando o embalo que no último post falei sobre o CASE, vou dar outra dica.

 

Por ex:

CREATE FUNCTION dbo.fn_Situacao(ID Integer)

RETURNS TABLE

AS

  RETURN (SELECT Col1,

                 Col2

                 CASE dbo.fn_SuperUltraFunctionRetornaTudo(@ID) WHEN ‘S’ THEN 1 ELSE 1 END as Status1,

                 CASE dbo.fn_SuperUltraFunctionRetornaTudo(@ID) WHEN ‘N’ THEN 0 ELSE 1 END as Status2

            FROM Tab1

           WHERE ID = @ID)

 

Repare que a function fn_SuperUltraFunctionRetornaTudo esta sendo utilizada duas vezes para o mesmo ID, ou seja tem um certo desperdício ai concorda? Se eu conseguir fazer com que a chamada desta function seja única, vou ganhar tempo… para isso podemos fazer o seguinte:

 

CREATE FUNCTION dbo.fn_Situacao(ID Integer)

RETURNS TABLE

AS

RETURN (WITH Temp_CTE (Situacao)

          AS

          (

            SELECT dbo.fn_SuperUltraFunctionRetornaTudo(@ID)

          )

          SELECT Col1,

                 Col2

                 CASE Temp_CTE.Situacao WHEN ‘S’ THEN 1 ELSE 1 END as Status1,

                 CASE Temp_CTE.Situacao WHEN ‘N’ THEN 0 ELSE 1 END as Status2

            FROM Tab1

           CROSS JOIN Temp_CTE

           WHERE ID = @ID)

 

Feito, usando a CTE eu tiro a duplicidade. Isso pode salvar seu dia…

Categorias:Não categorizado
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

%d blogueiros gostam disto: