Jump to content
Sign in to follow this  
Jair - Fórmula

Deficiencias do funcionário

Recommended Posts

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...

Important Information

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