Ir al contenido


Foto

2 selects misma tabla 1 query

sql server select

  • Por favor identifícate para responder
2 respuestas en este tema

#1 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 20 diciembre 2017 - 07:57

Hola, Actualmente estoy haciendo una tabla con el registro de estudiantes y sus notas. Tengo una tabla llamada registros

----------------

registros

----------------

idRegistro   |

estudiante   |

nota             |

year             |

mes             |

----------------

 

En esta tabla se guardan las notas del estudiante por año y mes (debe ir por fuerza separados), Cuando uno busca las notas, debe especificar el año y mes, al mismo tiempo debe traer la nota del año anterior del mismo mes. Lo que no entiendo es como hacer ese select.

 

Pensaba en select id,Registro,estudiante,nota,year,mes from registros where year='2017' AND mes='12' order by idRegistro ASC y al mismo tiempo poner el otro select restandole al año 1 para obtener las notas del año anterior en ese mes. Mi duda es como hacer ese select?

 

 

Gracias


  • 0

#2 Richi

Richi

    Advanced Member

  • Miembros
  • PipPipPip
  • 83 mensajes

Escrito 20 diciembre 2017 - 10:26

Lo resolvi con un join a la misma tabla


  • 0

#3 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 20 diciembre 2017 - 04:25

Hola,

Creo que ni hace falta hacer un "self join". A mi entender hay al menos otras dos alternativas:

 

1. UNION: Se realiza el select para obtener el registro del mes actual, y se lo une al select para el mes anterior. Esto generará un conjunto de datos con 2 registros.


sql
  1. (SELECT NOTA FROM TABLANOTAS WHERE ALUMNOID = 1 AND MES = 10 AND ANIO = 2017)
  2. UNION
  3. (SELECT NOTA FROM TABLANOTAS WHERE ALUMNOID = 1 AND MES = 10 AND ANIO = 2016)

2. SUBSELECT: Se puede obtener por subselect los valores de cada año y se regresan en campos diferentes. Esto generará un conjunto con un registro.


sql
  1. SELECT (SELECT NOTA FROM TABLANOTAS WHERE ALUMNOID = 1 AND MES = 10 AND ANIO = 2017) AS NOTAACTUAL, (SELECT NOTA FROM TABLANOTAS WHERE ALUMNOID = 1 AND MES = 10 AND ANIO = 2016) AS NOTAANTERIOR, ... FROM TABLANOTAS ...

No las he probado, pero la cosa para por ahí. Yo me inclino por la opcion UNION. Aunque hay que considerar que si la idea es obtener el listado por todos los alumnos ya no es viable esta forma y debe optarse por un diseño similar al del SUBSELECT.

 

Saludos,


  • 0





Etiquetado también con una o más de estas palabras: sql server, select

IP.Board spam blocked by CleanTalk.