Fórum Ajuda com SQL (Count) #293199

26/08/2005

0

Olá pessoal! Estou precisando da ajuda de vcs com um SQL. Estou fazendo um sistema de opiniao pública onde no final de cada questionario respondido o usuario do sistema precisaria fazer a contagem das respostas de algumas perguntas. Essa contagem pode ser de 1 unica pergunta ou com até 3 perguntas juntas. Tenho no BD a tabela de respostas onde cada resposta pergunta respondida corresponde a uma linha na tabela. Abaixo está o SQL:

Select COUNT(DISTINCT R1.CODQUESTIONARIO) RESPOSTA
From OP_RESPOSTA R1, OP_RESPOSTA R2, OP_RESPOSTA R3
Where R1.CODPESQUISA = R2.CODPESQUISA
And R1.CODPESQUISA = R3.CODPESQUISA
And R1.CODCLIENTE = R2.CODCLIENTE
And R1.CODCLIENTE = R3.CODCLIENTE
And R1.CODQUESTIONARIO = R2.CODQUESTIONARIO
And R1.CODQUESTIONARIO = R3.CODQUESTIONARIO
And R1.CODPESQUISA = 16
And R1.CODCLIENTE = 1
And R1.CODPERGUNTA = 7
And R1.CODALTERNATIVA = 144
And R2.CODPERGUNTA = 13
And R2.CODALTERNATIVA IN (251,251,253)
And R3.CODPERGUNTA = 15
And R3.CODALTERNATIVA IN (282,283)

Explicando esse SQL tenho q contar qtos questionarios responderam a pergunta 7 com a alternativa 144 + pergunta 13 com as alternativas 251,251,253 + a pergunta 15 com as altenativas 282,283. O conteudo do IN () seria as repostas de multiplas escolhas.
O problema é o comando ´ IN (251,251,253)´ e o ´IN (282,283)´ pois ele está contando as respostas que tem, por exemplo: (251,251,253,254,255), (251,253,254), etc.
Eu precisaria contar apenas os questionarios que tenham exatamente essas alternaitvas respondidas.

Valeu! Obrigado!
OBS: D7 + Firebird


Rssampaio

Rssampaio

Responder

Posts

26/08/2005

Rjun

O uso de parenteses deve resolver seu problema.

Select 
  COUNT(DISTINCT R1.CODQUESTIONARIO) RESPOSTA 
From 
  OP_RESPOSTA R1, OP_RESPOSTA R2, OP_RESPOSTA R3 
Where 
  R1.CODPESQUISA = R2.CODPESQUISA And 
  R1.CODPESQUISA = R3.CODPESQUISA And 
  R1.CODCLIENTE = R2.CODCLIENTE  And 
  R1.CODCLIENTE = R3.CODCLIENTE And 
  R1.CODQUESTIONARIO = R2.CODQUESTIONARIO And   
  R1.CODQUESTIONARIO = R3.CODQUESTIONARIO And 
  R1.CODPESQUISA = 16 And 
  R1.CODCLIENTE = 1 And 
  (R1.CODPERGUNTA = 7 And 
  R1.CODALTERNATIVA = 144) And 
  (R2.CODPERGUNTA = 13 And 
  R2.CODALTERNATIVA IN (251,251,253)) And
  (R3.CODPERGUNTA = 15 And 
  R3.CODALTERNATIVA IN (282,283) )



Responder

Gostei + 0

26/08/2005

Rssampaio

Rjun, não é kara...mas valeu! pela ajuda...

O problema é cada alternatina q tem dentro do ´IN´ e tive alguma delas em outros questionarios ele vai contar esse questionario.

E corrigindo ae a linha R2.CODALTERNATIVA IN (251,251,253)
seria isso: R2.CODALTERNATIVA IN (251,252,253), uma sequencia.

Valeu!


Responder

Gostei + 0

26/08/2005

Rjun

Deixa ver se eu entendi bem:

Para a pergunta 13 as respostas válidas são : 251, 252 e 253
Para a pargunte 15 as respostas válidas são : 282 e 283

Mas o select esta retornando para a pergunta 13 respostas entre 251 e 255?...é isso?


Responder

Gostei + 0

26/08/2005

Rssampaio

Isso mesmo Rjun!

Se por Exemplo um outro questionario respondeu a pergunta 13 com as alternativas 251,252,253,254,255 ele tb está contando este questionario.
Se tiver outro questiona com as alternativas 253,254,255 ele tb conta.

As respostas de Multiplas escolha válida seria somente as alternativas (251,252,253) e (281,281) da pergunta 13 e 15 respectivamente.


Responder

Gostei + 0

26/08/2005

Rjun

Outra dúvida. Como esta sua tabela de respostas? No caso para a pergunta 13 com as respostas 251, 252, 253, 254 e 255, ela teria 5 linhas.

13   251
13   252
13   253
13   254
13   255


É isso?


Responder

Gostei + 0

26/08/2005

Rssampaio

Exatamente Rjun!

Cada resposta que é dada é uma linha na tabela.

Minha tabela de resposta tem os seguinte campos:
CODRESPOSTA INTEGER NOT NULL,
CODPERGUNTA INTEGER NOT NULL,
CODQUESTIONARIO INTEGER NOT NULL,
CODALTERNATIVA INTEGER,
DTARESPOSTA DATE

O CODRESPOSTA é um seguencial da tabela, PK.


Responder

Gostei + 0

26/08/2005

Rjun

Então se o Cliente 1 respondeu para a pergunta 13 as opções 251, 252, 253 e 254 então ele não poderia entrar no seu select? Só deveria entrar se ele respondesse 251, 252 e 253? É isso?


Responder

Gostei + 0

26/08/2005

Rssampaio

Isso...somente respondeu exatamente as 3 alternativas, o resto ele nao pode contar.

blz!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar