Jump to content
Seja Membro VIP - Remova Banners de Propagandas, Tenha Liberado Qualquer Download, Além de Acessos em Áreas Exclusivas!! ×

Recommended Posts


  • Topic Count:  951
  • Topics Per Day:  0.13
  • Content Count:  9,215
  • Content Per Day:  1.24
  • Reputation:   466
  • Achievement Points:  110,001
  • Solved Content:  0
  • Days Won:  271
  • Status:  Offline
  • Age:  54
  • Device:  Windows

Posted

Vi que em algumas consultas, quando o cliente precisa saber as deficiências de uma pessoa, a sentença SQL está como o exemplo abaixo:

	SELECT A.NOME,
DEFICIENCIA = CASE WHEN A.DEFICIENTEAUDITIVO = '1' AND A.DEFICIENTEFALA = '0' AND A.DEFICIENTEFISICO = '0'
                    AND A.DEFICIENTEMENTAL = '0' AND A.DEFICIENTEVISUAL = '0' THEN 'Deficiente Auditivo'
                    WHEN A.DEFICIENTEAUDITIVO = '0' AND A.DEFICIENTEFALA = '1' AND A.DEFICIENTEFISICO = '0'
                    AND A.DEFICIENTEMENTAL = '0' AND A.DEFICIENTEVISUAL = '0' THEN 'Deficiente Fala'
                    WHEN A.DEFICIENTEAUDITIVO = '0' AND A.DEFICIENTEFALA = '0' AND A.DEFICIENTEFISICO = '1'
                    AND A.DEFICIENTEMENTAL = '0' AND A.DEFICIENTEVISUAL = '0' THEN 'Deficiente Físico'
                    WHEN A.DEFICIENTEAUDITIVO = '0' AND A.DEFICIENTEFALA = '0' AND A.DEFICIENTEFISICO = '0'
                    AND A.DEFICIENTEMENTAL = '1' AND A.DEFICIENTEVISUAL = '0' THEN 'Deficiente Mental'
                    WHEN A.DEFICIENTEAUDITIVO = '0' AND A.DEFICIENTEFALA = '0' AND A.DEFICIENTEFISICO = '0'
                    AND A.DEFICIENTEMENTAL = '0' AND A.DEFICIENTEVISUAL = '1' THEN 'Deficiente Visual'
                    ELSE '' END
FROM PPESSOA A (NOLOCK)
	

A questão, é que neste modelo o retorno dos dados é totalmente incompleto, pois pode acontecer de, lá no cadastro, uma pessoa ter mais de uma deficiência. Assim, a consulta acima só traz a informação abaixo:

NOME    | DEFICIENCIA
Maria    | Física
José      | Física
Pedro    | Fala

Pensando nisso, criamos a seguinte view:

	CREATE VIEW V_CONSTANT_DEFICIENCIA AS
SELECT ID = 1, NOME = 'Física' UNION
SELECT ID = 2, NOME = 'Auditiva' UNION
SELECT ID = 3, NOME = 'Fala' UNION
SELECT ID = 4, NOME = 'Visual' UNION
SELECT ID = 5, NOME = 'Mental' UNION
SELECT ID = 6, NOME = 'Intelectual'
	

Assim, a nossa consulta poderá ser montada da seguinte forma:

SELECT A.NOME,
DEFICIENCIA =     STUFF((SELECT ',' + X.NOME
        FROM V_CONSTANT_DEFICIENCIA X
        WHERE X.ID IN (    A.DEFICIENTEAUDITIVO,
                A.DEFICIENTEFALA,
                A.DEFICIENTEFISICO,
                A.DEFICIENTEINTELECTUAL,
                A.DEFICIENTEMENTAL)
        FOR XML PATH('')),1,1,'')
	FROM PPESSOA A (NOLOCK)
	

E o resultado será:

NOME    | DEFICIENCIA
Maria    | Física, Auditiva
José      | Física
Pedro    | Fala, Auditiva, Visual

 

Espero que tenha sido útil!

Ilano Caldas - MDI Soluções

  • Replies 1
  • Created
  • Last Reply

Top Posters In This Topic

Popular Days

Top Posters In This Topic


  • Topic Count:  951
  • Topics Per Day:  0.13
  • Content Count:  9,215
  • Content Per Day:  1.24
  • Reputation:   466
  • Achievement Points:  110,001
  • Solved Content:  0
  • Days Won:  271
  • Status:  Offline
  • Age:  54
  • Device:  Windows

Posted

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.