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

como utilizar un case en una subconsuta

Estas en el tema de como utilizar un case en una subconsuta en el foro de SQL Server en Foros del Web. Hola todos estoy desarrollando la siguiente consulta: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original SELECT idnumber , firstname , lastname , fraction FROM di082_question_attempt_steps INNER JOIN ...
  #1 (permalink)  
Antiguo 24/02/2014, 12:57
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 13 años, 10 meses
Puntos: 3
como utilizar un case en una subconsuta

Hola todos estoy desarrollando la siguiente consulta:

Código SQL:
Ver original
  1. SELECT idnumber,firstname,lastname,fraction
  2. FROM di082_question_attempt_steps INNER JOIN di082_user ON di082_user.id=di082_question_attempt_steps.userid
  3. WHERE questionattemptid IN
  4. (SELECT id FROM di082_question_attempts WHERE questionid>=74118 AND questionid<=74120) AND fraction IS NOT NULL ORDER BY lastname, firstname
Esta consulta funciona bien pero cada uno de los #74118 a 74120 representan notas y necesito q las muestre en columnas, y el sistema lo esta mostrando en filas.

como puedo hacer para generar estas columnas? estoy intentando utilizar la sentencia CASE sin embargo no se como emplearla ya que el valor 74118 esta en una subconsulta.

Espero haber sido claroy q me puedan ayudarme pronto.

gracias!

Última edición por gnzsoloyo; 24/02/2014 a las 13:08
  #2 (permalink)  
Antiguo 24/02/2014, 13:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: como utilizar un case en una subconsuta

un ejemplo de tus datos y lo que quieres para entenderte mejor.....
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 24/02/2014, 13:14
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: como utilizar un case en una subconsuta

hola mira esto es lo q sucede:

Al ejecutar esta consulta:

Código SQL:
Ver original
  1. SELECT idnumber,firstname,lastname,fraction FROM di082_question_attempt_steps INNER JOIN di082_user ON di082_user.id=di082_question_attempt_steps.userid
  2. WHERE questionattemptid IN(SELECT id FROM di082_question_attempts WHERE questionid>=74118 AND questionid<=74120) AND fraction IS NOT NULL ORDER BY lastname, firstname
[/PHP]

me arroja algo asi:

1020462007 ERICA DANIELA ACEVEDO 1.0000000
1020462007 ERICA DANIELA ACEVEDO 0.0000000
1020462007 ERICA DANIELA ACEVEDO 0.0000000
1037589675 EDWARD CAMILO ACEVEDO ACEVEDO 0.0000000
1037589675 EDWARD CAMILO ACEVEDO ACEVEDO 1.0000000
1037589675 EDWARD CAMILO ACEVEDO ACEVEDO 1.0000000

ahora necesito que agrupe los valores del mismo usuario creando dos columnas:

1020462007 ERICA DANIELA ACEVEDO 1.0000000 0.0000000 0.0000000
1037589675 EDWARD CAMILO ACEVEDO ACEVEDO 0.0000000 1.0000000 1.0000000

Gracias

Última edición por gnzsoloyo; 24/02/2014 a las 17:47 Razón: Usar highlight SQL por favor.
  #4 (permalink)  
Antiguo 24/02/2014, 13:24
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: como utilizar un case en una subconsuta

pero cuales son las condiciones para que sea en una columna o en la otra???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 24/02/2014, 13:32
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: como utilizar un case en una subconsuta

Hola, estan en la subconsulta (por eso es qno logro decifrar como hacerlo)

where questionid>=74118 and questionid<=74120

si es 74118 nota1
74119 nota2
74120 nota3
  #6 (permalink)  
Antiguo 24/02/2014, 13:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: como utilizar un case en una subconsuta

pues no entiendo el porque los between en un query, pero ok

Código SQL:
Ver original
  1. SELECT idnumber,firstname,lastname,
  2. CASE WHEN questionattemptid=74118 THEN fraction END AS nota1,
  3. CASE WHEN questionattemptid=74119 THEN fraction END AS nota2,
  4. CASE WHEN questionattemptid=74120 THEN fraction END AS nota3
  5. FROM
  6. di082_question_attempt_steps
  7. INNER JOIN di082_user ON di082_user.id=di082_question_attempt_steps.userid
  8. WHERE questionattemptid BETWEEN 74118 AND 74120
  9. AND fraction IS NOT NULL ORDER BY lastname, firstname

asi no te funciona???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 24/02/2014, 13:50
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: como utilizar un case en una subconsuta

no, es q estoy utilizando la clausula IN para una subconsulta:

where questionattemptid in(select id from di082_question_attempts where questionid>=74118 and questionid<=74120)
  #8 (permalink)  
Antiguo 24/02/2014, 14:44
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: como utilizar un case en una subconsuta

Código SQL:
Ver original
  1. SELECT idnumber,firstname,lastname,
  2. CASE WHEN questionattemptid=74118 THEN fraction END AS nota1,
  3. CASE WHEN questionattemptid=74119 THEN fraction END AS nota2,
  4. CASE WHEN questionattemptid=74120 THEN fraction END AS nota3
  5. FROM
  6. di082_question_attempt_steps
  7. INNER JOIN di082_user ON di082_user.id=di082_question_attempt_steps.userid
  8. WHERE questionattemptid IN
  9. (SELECT id FROM di082_question_attempts WHERE questionid>=74118 AND questionid<=74120) AND fraction IS NOT NULL ORDER BY lastname, firstname

y asi regresa o que quieres???
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 24/02/2014, 15:47
 
Fecha de Ingreso: junio-2010
Mensajes: 168
Antigüedad: 13 años, 10 meses
Puntos: 3
Respuesta: como utilizar un case en una subconsuta

Gracias por la ayuda, ya encontre la solucion!:
Código MySQL:
Ver original
  1. select idnumber,firstname,lastname,
  2. MAX (case WHEN (questionattemptid in(select id from di082_question_attempts where questionid=74118 )) then round(fraction) end) as Q1,
  3. MAX (case WHEN (questionattemptid in(select id from di082_question_attempts where questionid=74119 )) then round(fraction) end) as Q2,
  4. MAX (case WHEN (questionattemptid in(select id from di082_question_attempts where questionid=74120 )) then round(fraction) end) as Q3,
  5. from di082_question_attempt_steps inner join di082_user on di082_user.id=di082_question_attempt_steps.userid
  6. where questionattemptid in(select id from di082_question_attempts where questionid>=74118 and questionid<=74147) and fraction is not null
  7. group by di082_user.idnumber,di082_user.firstname, di082_user.lastname
  8. order by lastname, firstname

Gracias

Última edición por gnzsoloyo; 24/02/2014 a las 17:48

Etiquetas: case, select, siguiente
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 18:12.