none
Consulta SQL

    Question

  • Bom dia! Alguém pode me ajudar, por favor?

    Tenho um questionário com  3 perguntas diferentes e cada pergunta com 4 respostas diferentes. A idéia é criar uma coluna de percentual na qual 1 pergunta é 100% e terei que dividir este percentual por todas as respostas diferentes ou não desta pergunta.

    O que minha consulta esta trazendo:

    Colunas:     Perguntas      Código Pergunta      Resposta         Percentual

                   Pontualidade?           96                   Conforme            100%

                   Pontualidade?           96                Não Conforme          100%

    O que a consuta acima terá que fazer: agrupar a pergunta de código 96 e jogar 50% para cada resposta.Segue abaixo minha consulta:

     

    SELECT

     

    descr_pergform

    AS

     

    'PERGUNTA QUESTIONRIO',

    num_pergform

    AS

     

    'CDIGO PERGUNTA',

    resp_valresp

    AS

     

    'RESPOSTA QUESTIONRIO',

     

    COUNT(resp_valresp) AS

     

    'QUANTIDADE TOTAL QUEST.RESP.',

     

     

    (SELECT COUNT(resp_valresp)

     

    FROM valoresresp

     

    WHERE numform_valresp = numform_pergform

     

    AND num_pergform = numperg_valresp

     

    AND num_valresp = numvalresp_resp) * 100 / COUNT(resp_valresp) AS

     

    'Porcentagem'

    FROM

     

    pessgq

     

    INNER JOIN pessoas

     

    ON pessgq.codpessoas_pes = pessoas.cod_pes

     

    LEFT JOIN atividadeeconomica

     

    ON pessoas.cnae_pes = atividadeeconomica.codigo_aec

     

    LEFT JOIN pesjur

     

    ON pessoas.cod_pes = pesjur.cod_pj

     

    LEFT JOIN avalfornecedor

     

    ON avalfornecedor.codpes_avalfor = pessgq.codpessoas_pes

     

    AND avalfornecedor.emp_avalfor = pessgq.emp_pes

     

    INNER JOIN respostasquest q

     

    ON identquest_resp = CAST('AVALFOR ' + CAST(avalfornecedor.num_avalfor

     

    AS

     

    VARCHAR)

     

    + '-' + CAST(

    avalfornecedor

    .codpes_avalfor

     

    AS VARCHAR) + '-'

     

    +

     

    CAST(avalfornecedor.emp_avalfor AS VARCHAR) AS

     

    VARCHAR)

     

    INNER JOIN valoresresp

     

    ON numpergform_resp = numperg_valresp

     

    AND numform_resp = numform_valresp

     

    AND numvalresp_resp = num_valresp

     

    LEFT JOIN pergformulario

     

    ON numform_valresp = numform_pergform

     

    AND numperg_valresp = num_pergform

     

    INNER JOIN formulario

     

    ON formulario.num_form = pergformulario.numform_pergform

    WHERE

     

    num_form = 14

     

    AND num_pergform IN( 96, 97, 98 )

     

    AND COD_PES =1830

     

    GROUP

     

    BY resp_valresp,

    num_pergform

    ,

    pessoas

    .cod_pes,

    pessoas

    .cpf_pes,

    pessoas

    .nome_pes,

    pessoas

    .nomefant_pes,

    pesjur

    .contato_pj,

    pesjur

    .contato2_pj,

    pessoas

    .email_pes,

    pessoas

    .endwww_pes,

    atividadeeconomica

    .descricao_aec,

    pessoas

    .ender_pes,

    pessoas

    .cidade_pes,

    pessoas

    .uf_pes,

    pessoas

    .cep_pes,

    dtfornec_avalfor

    ,

    pergformulario

    .descr_pergform,

    formulario

    .num_form,

    valoresresp

    .numperg_valresp,

    valoresresp

    .numform_valresp,

    valoresresp

    .num_valresp,

    pergformulario

    .numform_pergform,

    numvalresp_resp

    • Edited by CláuLima Wednesday, June 16, 2010 2:20 PM
    Wednesday, June 16, 2010 1:36 PM

Answers

  • ClauLima,

    Eu acho que o seu problema é dados... como pode haver 100% do codigo 96  "conforme" e 100% também do codigo 96 "Não Conforme"?

    Quem calcula o campo percentual deveria preencher com 50% para cada (neste caso do codigo 96)

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    • Marked as answer by CláuLima Wednesday, June 16, 2010 2:58 PM
    Wednesday, June 16, 2010 1:59 PM
    Moderator

All replies

  • ClauLima,

    Eu acho que o seu problema é dados... como pode haver 100% do codigo 96  "conforme" e 100% também do codigo 96 "Não Conforme"?

    Quem calcula o campo percentual deveria preencher com 50% para cada (neste caso do codigo 96)

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    • Marked as answer by CláuLima Wednesday, June 16, 2010 2:58 PM
    Wednesday, June 16, 2010 1:59 PM
    Moderator
  • Marcelo, tudo bem?

    O problema não seria dados, porque o campo percentual eu quem estou criando. Estou pegando o total de perguntas * 100 e dividindo

    pelo número de respostas. Abaixo segue mais alguns exemplos. Você pode notar que:

    a pergunta "Qualidade" de número 98 tem 3 respostas iguais então o percentual = 33% para cada uma.

    Sendo que na pergunta de número 96 por terem respostas diferentes ele joga 100% para cada uma e teria que jogar 50% para cada uma,

    uma vez que a pergunta é igual.

    Colunas:

    Colunas:     Perguntas      Código Pergunta     Quantidaderespostas    TipoResposta         Percentual

                   Pontualidade?           96                            01                       Conforme            100%

                   Pontualidade?           96                            01                     Não Conforme        100%

                   Qualidade?               98                            03                        Acima de              33%

     

     

    Wednesday, June 16, 2010 2:26 PM
  • ClauLima,

    Deve existir alguma maneira mais simples... mas consegui da seguinte maneira

    declare @tbTeste as table (nmPer varchar(20), cdPergunta int, qtResp int,tpResposta varchar(20))
    insert into @tbTeste values('Pontualidade',96,1,'Conforme')
    insert into @tbTeste values('Pontualidade',96,1,'Não Conforme')
    insert into @tbTeste values('Qualidade',98,3,'Acima de')
    
    ;with cte_dados
    as
    (
    select nmPer, cdPergunta,qtResp,tpResposta, 
      
      (select SUM(qtResp) from @tbTeste b where b.cdPergunta=a.cdPergunta and a.tpResposta=b.tpResposta) as somResp
      ,
      (select count(qtResp) from @tbTeste b where b.cdPergunta=a.cdPergunta ) as totResp
    from @tbTeste a
    ),
    cte_dados2 as (
      select nmPer, cdPergunta,qtResp,tpResposta,
      convert(float,somResp)/convert(float,totResp) as totPerc
      from cte_dados
    )
    
    select nmPer, cdPergunta,qtResp,tpResposta, case when totPerc = qtResp then 100 else totPerc*100 end as percentual
    from cte_dados2
    

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS. Se útil, classifique!!!
    Wednesday, June 16, 2010 3:04 PM
    Moderator
  • Marcelo, muito obrigada.

    Vou tentar implementar e te dou uma posição.

    Att.

    Cláudia Lima.

    Wednesday, June 16, 2010 4:12 PM