SQL - CONTAR ALTERNATIVAS

   
Vista:
Imágen de perfil de Miguel

CONTAR ALTERNATIVAS

Publicado por Miguel miguemat@live.com (2 intervenciones) el 29/08/2015 20:10:51
Estimados amigos buen día, espero puedan ayudarme con este problema. Gracias desde ya.

Estoy trabajando en ACCESS tengo la siguiente tabla.

ALUMNO_PRUEBA
1
2
3
4
cod_alum    |    Claves_C1 |    Claves_C2
20151298    |    DXAAB       |    BBDAD
60010518    |    BCAAA       |    BCDDA
60063970    |    DXAAA       |    XDDCA

En este caso cada alumno tiene dos pruebas cada una de 5 preguntas que al final indica que para el alumno '20151698' sus claves en total son 'DXAABBBDAD'. Lo que deseo es saber la frecuencia de las alternativas marcadas por lo 3 alumnos, es decir una consulta que me muestre lo siguiente.

1
2
3
4
5
6
Alternativa             P1    P2     P3     P4    P5     P6    P7     P8     P9     P10
A                       0     0      3      3     2      0      0     0      1       2
B                       1     0      0      0     1      2      1     0      0       0
C                       0     1      0      0     0      0      1     0      1       0
D                       2     0      0      0     0      0      1     3      1       1
X                       0     2      0      0     0      1      0     0      0       0

Donde P_1 significa la pregunta 1, asi sucesivamente. La pregunta 1, 2 alumnos marcaron 'D' y 1 alumno marcó 'C'. Espero se entienda..

Gracias por la ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

CONTAR ALTERNATIVAS

Publicado por Rafael (83 intervenciones) el 31/08/2015 14:25:13
Hola:

Para resolver he usado una tabla mas donde he puesto las Alternativas:
Imagen

Con la tabla original que indicas:
Imagen

Luego hago una consulta a modo SQL que es donde mejor me muevo con la siguiente sentencia;
1
2
3
4
5
6
7
8
9
10
11
12
SELECT Alternativa.Alternativa
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C1, 1,1) = Alternativa.Alternativa) as P1
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C1, 2,1) = Alternativa.Alternativa) as P2
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C1, 3,1) = Alternativa.Alternativa) as P3
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C1, 4,1) = Alternativa.Alternativa) as P4
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C1, 5,1) = Alternativa.Alternativa) as P5
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C2, 1,1) = Alternativa.Alternativa) as P6
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C2, 2,1) = Alternativa.Alternativa) as P7
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C2, 3,1) = Alternativa.Alternativa) as P8
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C2, 4,1) = Alternativa.Alternativa) as P9
, (SELECT COUNT(COD_ALUM) FROM Prueba WHERE Mid(Claves_C2, 5,1) = Alternativa.Alternativa) as P10
FROM Alternativa;

Y listo resultado:
Imagen

Si te ha funcionado cuentanos... si no tambien...
Y no te olvides de puntuar... saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Miguel

CONTAR ALTERNATIVAS

Publicado por Miguel (2 intervenciones) el 31/08/2015 16:17:11
Excelente amigo Rafael, agregar una tabla más es genial me puede permitir, incluso, listar más opciones de respuesta.
En realidad solo coloque un ejemplo con 10 preguntas, pero lo cierto es que son 52, siguiendo el mismo código ya lo hice y funciona bien, a menos que algún otro amigo se le ocurra algo más corto.

Eso de colocar Select como columnas no lo sabía, yo había realizaco select dentro de select pero como una nueva tabla para consultar. Ya aprendí algo más. Gracias

Yo había echo algo pero es muy extenso (esto solo es para 3 preguntas), imagina para 52 el mismo MS ACCESS me mandaba mensaje de que la consulta era muy compleja, tenia que hacerla por partes.

SELECT
SUM(iif (Mid(Claves_C1,1,1)='A',1,0)) as A,
SUM(iif (Mid(Claves_C1,1,1)='B',1,0)) as B,
SUM(iif (Mid(Claves_C1,1,1)='C',1,0)) as C,
SUM(iif (Mid(Claves_C1,1,1)='D',1,0)) as D,
SUM(iif (Mid(Claves_C1,1,1)='X',1,0)) as X
From TB_prueba;

UNION ALL
SELECT
SUM(iif (Mid(Claves_C1,2,1)='A',1,0)) as A,
SUM(iif (Mid(Claves_C1,2,1)='B',1,0)) as B,
SUM(iif (Mid(Claves_C1,2,1)='C',1,0)) as C,
SUM(iif (Mid(Claves_C1,2,1)='D',1,0)) as D,
SUM(iif (Mid(Claves_C1,2,1)='X',1,0)) as X
From TB_prueba;

UNION ALL
SELECT
SUM(iif (Mid(Claves_C1,3,1)='A',1,0)) as A,
SUM(iif (Mid(Claves_C1,3,1)='B',1,0)) as B,
SUM(iif (Mid(Claves_C1,3,1)='C',1,0)) as C,
SUM(iif (Mid(Claves_C1,3,1)='D',1,0)) as D,
SUM(iif (Mid(Claves_C1,3,1)='X',1,0)) as X
From TB_prueba;

.... (continuará).

Gracias una vez más.

PD: ¿La puntuación es máximo 1? No puedo puntuar más
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

CONTAR ALTERNATIVAS

Publicado por Rafael (83 intervenciones) el 01/09/2015 08:33:29
Si solo es un +1....

Que bueno que te funcionara saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar