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

Como consulto un campo dos veces?

Estas en el tema de Como consulto un campo dos veces? en el foro de SQL Server en Foros del Web. Hola a todos, no soy muy bueno en consultas avanzadas (o por lo menos para mí lo es) necesito seleccionar los detalles de los exámenes ...
  #1 (permalink)  
Antiguo 24/09/2011, 23:30
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Como consulto un campo dos veces?

Hola a todos, no soy muy bueno en consultas avanzadas (o por lo menos para mí lo es) necesito seleccionar los detalles de los exámenes hechos por los participantes. Tengo las siguientes tablas (de forma resumida):

tbUsuarios(UsuId, UsuNombre)
tbPreguntas(PregId, PregPregunta, PregRespCorrecta, PregResp2, PregResp3)
tbExamenes(ExaId, ExaIdUsuario, ExaFecha)
tbDetalleExamen(DetId, DetIdExa, DetIdPregunta, DetRespuesta)

Se relacionan UsuId-ExaIdUsuario, PregId-DetIdPregunta, ExaId-DetIdExa

La consulta que he hecho es muy básica, es esta:

Código:
"select E.ExaId, U.UsuNombre, P.PregPregunta, P.PregRespCorrecta, D.DetContestada, D.DetTiempo" _
& "  from tbExamenes E, tbDetalleExamen D, tbUsuarios U, tbPreguntas P" _
& " where P.PregCodigo=D.DetPregunta And  E.ExaId=D.DetExamen AND" _
& " U.UsuId=E.ExaIdUsuario AND E.ExaId='" & cbExamen.Text & "'"
Con esto resultan unas columnas en Mi Grilla, así:

ExaId, UsuNombre, PregPregunta, PregRespCorrecta, DetContestada, DetTiempo
390,-- Danna,-- ¿cómo...?,-- Pues...,-- Incorrec2,-- 0:5
390,-- Danna,-- ¿Por q...?,-- porq...,-- RespCorr,-- 0:9
390,-- Danna,-- ¿Para ...?,-- Así...,-- Incorrec3,-- 0:8

Lo que necesito es que aparezca otra columna después de la respuesta correcta en la que me muestre la respuesta que contestó el participante (no correcto o incorrecto sino la respuesta que contestó. Se encuentra también en tbPreguntas, en alguno de sus campos).

Por favor Ayúdenme! lo necesito Muchas gracias!

ah, estoy trabajando en SQLServer 2008 y Visual Basic 2010.

Última edición por bluesky777; 24/09/2011 a las 23:36 Razón: Ahora me doy cuenta que el título no va con el tema, pido mil disculpas.
  #2 (permalink)  
Antiguo 25/09/2011, 02:46
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Como consulto un campo dos veces?

a para nombres que escogiste en las columnas jeje me revolví intentando crear una consulta con tus columnas :p pero va...

por lo poco que entendí (espero no haber entendido mal) lo que tu necesitas es relacionar las tablas y unir los campos para poder mostrar la respuesta según el usuario

cosa que se consigue utilizando un JOIN para relacionar las tablas mediante un campo... para tus tablas seria algo así
Código SQL:
Ver original
  1. SELECT t1.ExaID,t0.UsuNombre,t3.PregPregunta,t3.PregRespCorrecta,t2.DetRespuesta,t2.DetTiempo
  2. FROM tbUsuarios t0
  3. JOIN tbExamenes t1 ON t1.ExaIdUsuario = t0.UsuID
  4. JOIN tbDetalleExamen t2 ON t2.DetIdExa = t1.ExaId
  5. JOIN tbPreguntas t3 ON t3.PregId = t2.DetIdPregunta
  #3 (permalink)  
Antiguo 25/09/2011, 09:54
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Como consulto un campo dos veces?

Gracias Ag666, he aprendido cómo hacer la consulta de forma más clara con el Join, pero esta consulta que me estás dando hace lo mismo que la mia. Creo que expliqué más de lo que debí. Quiero que me aparezca algo así:

UsuNombre, PregPregunta, PregRespCorrecta, DetContestada, DetTiempo
Danna,-- ¿Cómo hace?,-- Pues...,-- Haciendo,-- Incorrec2
Danna,-- ¿Por q...?,-- porq...,-- Porq,-- RespCorr
Danna,-- ¿Para ...?,-- Así...,-- Porq..., -- Incorrec3

Me explico, en el primer registro de arriba dice que a la pregunta "¿Cómo hace?", Danna respondió "Pues...", pero la respuesta correcta era "Haciendo", por lo tanto respondió la respuesta que estaba en el campo "Incorrec2" (aunque podemos quitar esta columna, no hay problema) o ¿acaso toca hacer un ciclo y preguntar por cada una? Gracias, espero sus respuestas.
  #4 (permalink)  
Antiguo 25/09/2011, 10:43
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Como consulto un campo dos veces?

serán acaso las columnas PregResp2, PregResp3.... una puede ser mostrar dos columnas o si me dices que el usuario solo puede seleccionar una de las dos usaríamos un CASE

si vas a mostrar las dos columnas, siguiendo la consulta con join al estar ya vinculadas la tablas solo tendrías que poner
Código SQL:
Ver original
  1. SELECT t1.ExaID,t0.UsuNombre,t3.PregPregunta,t3.PregRespCorrecta,t2.DetRespuesta,t2.DetTiempo,t3.PregResp2,t3.PregResp3,
si solo se necesita mostrar una columna segun la eleccion del usuario (si el usuario solo puede seleccionar una)
Código SQL:
Ver original
  1. SELECT t1.ExaID,t0.UsuNombre,t3.PregPregunta,t3.PregRespCorrecta,t2.DetRespuesta,t2.DetTiempo
  2. ,CASE WHEN t3.PregResp2 <> '' THEN t3.PregResp2 ELSE t3.PregResp3 END AS Respuesta

para tu ultima columna de respuesta correcta e incorrecta aplica lo mismo, un CASE te solventaría el problema
  #5 (permalink)  
Antiguo 25/09/2011, 12:42
 
Fecha de Ingreso: noviembre-2008
Mensajes: 77
Antigüedad: 15 años, 5 meses
Puntos: 8
Respuesta: Como consulto un campo dos veces?

Muchísimas gracias!! No sabía que existía el select case en Sql Server, aun no salía lo que quería, pero leí sobre el case y me quedó así:

Código:
SELECT t0.UsuNombre,t3.PregPregunta,t3.PregRespCorrecta,t2.DetContestada, 
Case t2.DetContestada 
when 'RespCorrec' then t3.PregRespCorrecta 
when 'Resp2' then t3.PregResp2 
when 'Resp3' then t3.PregResp3 
when 'Resp4' then t3.PregResp4 
end AS 'Respuesta Contestada', t2.DetTiempo
FROM tbUsuarios t0
JOIN tbExamenes t1 ON t1.ExaLogin = t0.UsuLogin 
JOIN tbDetalleExamen t2 ON t2.DetExamen  = t1.ExaId
JOIN tbPreguntas t3 ON t3.PregCodigo  = t2.DetPregunta
where t2.DetExamen=400
Es que ya los exámenes están hechos, y lo que necesito es mostrar los resultados de esos exámenes, mostrar las respuestas correctas y las respuestas que contestó el usuario.

Ahora me pregunto, ¿esto solo funciona el SQL Server? o ¿tambien sirve en MySql?, porque tengo entendido que sql es un lenguaje universal, ¿no?

Gracias por su ayuda!
  #6 (permalink)  
Antiguo 26/09/2011, 11:17
Avatar de ArturoGallegos
Moderador
 
Fecha de Ingreso: febrero-2008
Ubicación: Morelia, México
Mensajes: 6.774
Antigüedad: 16 años, 2 meses
Puntos: 1146
Respuesta: Como consulto un campo dos veces?

pues no soy un experto en base de datos como para decir que SQL es universal, hasta donde tengo entendió es muy similar en todas los tipos de DB y cada una tiene sus particularidades en cuanto a las funciones aceptadas y su sintaxis... pero como te repito no soy un experto habría que revisar mas a fondo y/o ver si algún otro usuario nos lo confirma.

en cuanto al CASE en concreto si existe en MySql y por lo que veo funciona de la misma forma

Etiquetas: vb2010
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 04:00.