Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Devolver respuestas encuesta en una sola consulta

Estas en el tema de Devolver respuestas encuesta en una sola consulta en el foro de Bases de Datos General en Foros del Web. Tengo esta consulta para recoger las respuestas de una encuesta SELECT [p-1], count(*) AS [Nº veces contestado] FROM datos GROUP BY [p-1]; pero solo me ...
  #1 (permalink)  
Antiguo 13/06/2005, 02:15
Avatar de savage10  
Fecha de Ingreso: febrero-2005
Mensajes: 19
Antigüedad: 19 años, 9 meses
Puntos: 0
Devolver respuestas encuesta en una sola consulta

Tengo esta consulta para recoger las respuestas de una encuesta

SELECT [p-1], count(*) AS [Nº veces contestado]
FROM datos
GROUP BY [p-1];

pero solo me devuelve las respuestas de la pregunta p-1, ¿como tendria que hacerlo para que devuelva todas las respuestas de todas las preguntas (hay hasta p-5) sin hacer una consulta para cada pregunta?
  #2 (permalink)  
Antiguo 13/06/2005, 04:04
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
supongo que [p-1] es el código de la pregunta, si el campo en el que se guarda esa pregunta se llama COD_PREGUNTA por ejemplo, podrías hacer algo así

Código:
SELECT COD_PREGUNTA, count(*) AS [Nº veces contestado]
FROM datos
GROUP BY COD_PREGUNTA;
Espero que te sirva
  #3 (permalink)  
Antiguo 13/06/2005, 04:10
Avatar de savage10  
Fecha de Ingreso: febrero-2005
Mensajes: 19
Antigüedad: 19 años, 9 meses
Puntos: 0
Exacto, pero me gustaría que en la misma consulta pudiera obtener todas las respuestas a todas las preguntas, p-1,p-2,p-3...
  #4 (permalink)  
Antiguo 13/06/2005, 04:16
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
no estoy seguro de entender lo que quieres. la tabla datos qué campos tiene y qué significa cada uno?

el resultado que quieres es algo así?

pregunta1 - respuestaA1 - nº veces respondida
pregunta1 - respuestaB1 - nº veces respondida
pregunta2 - respuestaA2 - nº veces respondida

Si esto es lo que quieres, suponiendo un campo COD_PREGUNTA, y un campo COD_RESPUESTA la solución podría ser

Código:
SELECT COD_PREGUNTA,COD_RESPUESTA,count(*) AS [Nº veces contestado]
FROM datos
GROUP BY COD_PREGUNTA,COD_RESPUESTA;
  #5 (permalink)  
Antiguo 14/06/2005, 01:12
Avatar de savage10  
Fecha de Ingreso: febrero-2005
Mensajes: 19
Antigüedad: 19 años, 9 meses
Puntos: 0
En la tabla datos tengo los campos: p-1-1, p-1-2, p-1-3, p-1-4, p-1-5. Estos campos se refieren a las preguntas, pero almacenan las diferentes respuestas a cada pregunta, es decir, almacenan valores del 1 al 5.

Yo hago:

SELECT [p-1-1], count(*) AS [Nº veces contestado]
FROM datos
GROUP BY [p-1-1]

y obtengo:

p-1-1 Nº veces contestado
875 (875 registros sin contestar)
1 64 (64 registros que han seleccionado la respuesta 1)
2 125 (125 han seleccionado la 2)
3 30 etc
4 19
5 13

el problema es que esta consulta solo me resuelve la pregunta 1 y tendria que hacer una consulta para cada pregunta,una para la p-1-1, otra consulta para la p-1-2, etc. Supongamos que tengo 20 o 30 preguntas...¿hay que hacer 20 o 30 consultas?


Muchas gracias por contestar xaquin, este tema puede servirle a mucha gente, si en una sola consulta obtenemos todas las respuestas de una encuesta...viva el sql !!! jeje
  #6 (permalink)  
Antiguo 14/06/2005, 08:32
Avatar de jose rayado  
Fecha de Ingreso: mayo-2005
Ubicación: Monterrey
Mensajes: 35
Antigüedad: 19 años, 6 meses
Puntos: 0
Hola que tal como estas, bueno espero poder entenderte, pero quieres el numero de respuestas contestadas para cada pregunta , porque no utilizas distinct


SELECT distinct[cod_pregunta], count(respuestas) AS [Nº veces contestado]
FROM datos
GROUP BY [cod_pregunta]

Espero que sea tu solucion
  #7 (permalink)  
Antiguo 14/06/2005, 08:41
 
Fecha de Ingreso: agosto-2002
Mensajes: 230
Antigüedad: 22 años, 3 meses
Puntos: 1
a lo mejor podrías hacerlo con un union

Código:
SELECT [p-1-1], count(*) AS [Nº veces contestado]
FROM datos
GROUP BY [p-1-1]
UNION
SELECT [p-1-2], count(*) AS [Nº veces contestado]
FROM datos
GROUP BY [p-1-2]
UNION
.
.
.
SELECT [p-N-M], count(*) AS [Nº veces contestado]
FROM datos
GROUP BY [p-N-M]
pero así no sabrías de qué pregunta se trata, ya que esto te devolvería algo así

875 (875 registros sin contestar)
1 64 (64 registros que han seleccionado la respuesta 1)
2 125 (125 han seleccionado la 2)
3 30 etc
4 19
5 13
875 (875 registros sin contestar) --- pero esto sería de la pregunta 2
1 64 (64 registros que han seleccionado la respuesta 1)
2 125 (125 han seleccionado la 2)
3 30 etc
4 19
5 13
875 (875 registros sin contestar) ---- y esto sería de la pregunta 3
1 64 (64 registros que han seleccionado la respuesta 1)
2 125 (125 han seleccionado la 2)
3 30 etc
4 19
5 13


y de todas maneras no estoy seguro de que funcione el union de esta manera

creo que la solución más fácil sería que tuvieras una tabla de preguntas con su código y otra tabla de respuestas a preguntas en las que un campo fuera el código de pregunta y al lado estuviera el código de respuesta y así podrías hacer lo que quieres fácilmente
  #8 (permalink)  
Antiguo 16/06/2005, 04:49
Avatar de savage10  
Fecha de Ingreso: febrero-2005
Mensajes: 19
Antigüedad: 19 años, 9 meses
Puntos: 0
Cita:
creo que la solución más fácil sería que tuvieras una tabla de preguntas con su código y otra tabla de respuestas a preguntas en las que un campo fuera el código de pregunta y al lado estuviera el código de respuesta y así podrías hacer lo que quieres fácilmente

Pues va a ser que tendré que hacerlo así, gracias, cuando lo implemente lo comentaré aquí
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:11.