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

Validar Alias SQL, manejo de fechas!!!

Estas en el tema de Validar Alias SQL, manejo de fechas!!! en el foro de SQL Server en Foros del Web. Hola a todos!!! Disculpen la molestia, tengo una duda con una consulta que estoy desarrollando en sql. Lo que intento hacer es delimitar los registros ...
  #1 (permalink)  
Antiguo 18/10/2011, 11:57
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Exclamación Validar Alias SQL, manejo de fechas!!!

Hola a todos!!! Disculpen la molestia, tengo una duda con una consulta que estoy desarrollando en sql.

Lo que intento hacer es delimitar los registros diciendo que sí el sexo de un trabajador (sextrab) es masulino le agregue 30 años a su fecha de antigüedad (fe_antre) en la empresa, si es mujer le agregue 25 años para determinar la fecha de su probable jubilación, eso si me lo hace la consulta para eso es esta:

Código SQL:
Ver original
  1. "SELECT fe_antre, CASE WHEN sexotrab='M' THEN DATEADD(yy, 30, fe_antre) ELSE DATEADD(yy, 25, fe_antre) END AS fe from b_traba1"

Ahora lo otro que quisiera hacer es que si el trabajador ya cumplió con los años de servicio en la empresa me arroje la cantidad de años que se ha pasado desde que pudo haberse jubilado, lo intente con esta consulta:

Código SQL:
Ver original
  1. "SELECT fe_antre, CASE WHEN sexotrab='M' THEN DATEADD(yy, 30, fe_antre) ELSE DATEADD(yy, 25, fe_antre) END AS fe, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub from b_traba1"

Ya había hecho algo parecido antes con el "DATEDIFF" pero ahora que uso un alias (fe) me aparece un error:

"El nombre de columna 'fe' no es válido."

Cómo podría hacerle para que me valide "fe" en la consulta??... Agradezco mucho su ayuda...
  #2 (permalink)  
Antiguo 18/10/2011, 12:00
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Validar Alias SQL, manejo de fechas!!!

Código SQL:
Ver original
  1. SELECT fe_antre,fe,CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM(
  2. SELECT fe_antre, CASE WHEN sexotrab='M' THEN DATEADD(yy, 30, fe_antre) ELSE DATEADD(yy, 25, fe_antre) END AS fe FROM b_traba1
  3. )AS t1

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 18/10/2011, 12:34
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Cita:
Iniciado por Libras Ver Mensaje
Código SQL:
Ver original
  1. SELECT fe_antre,fe,CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM(
  2. SELECT fe_antre, CASE WHEN sexotrab='M' THEN DATEADD(yy, 30, fe_antre) ELSE DATEADD(yy, 25, fe_antre) END AS fe FROM b_traba1
  3. )AS t1

Saludos!
Alaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!!! MUCHAS GRACIAAAAAAAAAAAAAAAAAAAAS!!! Exactamente lo que quiero, oye ahm ahorita lo tengo que adecuar a una consulta más grande, que es esta:

Código SQL:
Ver original
  1. SELECT c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1, b_traba3, c_zonas, c_a_resp WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe GROUP BY c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_traba1.sexotrab

Pero supongo que ya no habrá problema, en serio muchas gracias 1000 puntos!!!...
  #4 (permalink)  
Antiguo 18/10/2011, 13:02
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Libras Muchas gracias por tu respuesta, solo que ahora me marcaba este error cuando lo adecue a mi otra consulta:

Valor de Timeout caducado. El período de tiempo de espera caducó antes de completar la operación o el servidor no responde.

La límite a 100 registros a ver que pasa, y me arroja el mismo trabajador, supongo que por eso tarda tanto...

Código SQL:
Ver original
  1. SELECT top 100 c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT b_traba1.fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe GROUP BY c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_traba1.sexotrab, fe


Así es cómo la tengo originalmente:

Código SQL:
Ver original
  1. SELECT c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT b_traba1.fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe GROUP BY c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_traba1.sexotrab, fe

Disculpa que la consulta este hecha una sopa, pero me pidieron varias cosas en ella. Será que tengo que hacer otro group by, o relacionar algun campo en el where?? Seguirpe en eso, pero agradecería mucho tu ayuda...
  #5 (permalink)  
Antiguo 18/10/2011, 13:04
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Siendo más especifíco los registros que me manda son estos, el único que cambia es el de "anyjub":

nombre dscarea rpe nombre1 fe_antre fe_ingre fe_natra Edad fe anyjub
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -15
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -16
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -12
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -13
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -10
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -7
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -11
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -4
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -6
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. 2
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -10
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -6
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. 0
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. 0
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -15
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -19
VICTORIA ZONA VICTORIA 53090 RAMON RAMOS NAVARRO 01/06/1960 12:00:00 a.m. 01/06/1960 12:00:00 a.m. 25/10/1933 12:00:00 a.m. 77 01/06/1990 12:00:00 a.m. -14
  #6 (permalink)  
Antiguo 18/10/2011, 14:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Validar Alias SQL, manejo de fechas!!!

Primero tienes en el group by todos los elemtos de tu select por lo que no te va a agrupar nada, y segundo tienes un producto cartesiano entre t1 y b_traba1 creo que en tu query faltaria relacionar t1 con b_traba1

Saludos!!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 21/10/2011, 08:12
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Mira ahm, de hecho al principio yo pensaba lo mismo, que no debía agrupar todos los campos con el GROUP BY, pero por ejemplo al no incluir en dicho GROUP BY por ejemplo al campo: "b_traba1.sexotrab" me arroja el siguiente error:

La columna 'b_traba1.sexotrab' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.

Y disculpa por tantas molestias, pero cómo podría relacionar t1, con b_traba1 si no existen campos de la tabla t1 que se relacionen con b_traba1, bueno tal vez las fechas pero creo que son solo "anyjub" y "fe" los campos que son de t1 no?? Y ellos no existen en b_traba1...
  #8 (permalink)  
Antiguo 21/10/2011, 08:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Validar Alias SQL, manejo de fechas!!!


La columna 'b_traba1.sexotrab' de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.


Esto quiere decir que si quitas esa columna del group by la quites del select......veo que puedes relacionar el campo fe_antre de t1 y b_traba1, revisa bien tu group by y tus relaciones que ahi es donde tienes el error.
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #9 (permalink)  
Antiguo 21/10/2011, 08:41
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Ala, mira creo que gracias a Dios ya quedo, la consulta quedo así...

Código SQL:
Ver original
  1. SELECT c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, CONVERT (INT,(DATEDIFF (dd, b_traba3.fe_natra, GETDATE()) - DATEDIFF (yy, b_traba3.fe_natra, GETDATE()) / 4.25) / 365) AS Edad, fe, CONVERT (INT,(DATEDIFF (dd, GETDATE(), fe) - DATEDIFF (yy, GETDATE(), fe) / 4.25) / 365) AS anyjub FROM (SELECT fe_antre, CASE WHEN b_traba1.sexotrab='M' THEN DATEADD(yy, 30, b_traba1.fe_antre) ELSE DATEADD(yy, 25, b_traba1.fe_antre) END AS fe FROM b_traba1) AS t1, b_traba1, b_traba3, c_zonas, c_a_resp WHERE (DATEDIFF(yy, b_traba1.fe_antre, GETDATE()) > 25) AND (DATEDIFF(yy, b_traba3.fe_natra, GETDATE()) > 55) AND c_zonas.descr=b_traba1.cl_zona AND c_a_resp.area=b_traba1.area AND b_traba1.rpe=b_traba3.rpe AND b_traba1.fe_antre=t1.fe_antre GROUP BY c_zonas.nombre, c_a_resp.dscarea, b_traba1.rpe, b_traba1.nombre, b_traba1.fe_antre, b_traba1.fe_ingre, b_traba3.fe_natra, b_traba1.sexotrab, fe

Solo la misma pregunta del post anterior, por que me arroja el error si no coloco alguna columna en el group by??... Muchísimas gracias Libras.
  #10 (permalink)  
Antiguo 21/10/2011, 08:43
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Ahm pero si la quito del SELECT no la puedo imprimir en la salida de pantalla de la consulta, creo que por ahora todas las columnas que agregue en select las tengo que agregar en el group by, aunque en realidad no le hayo mucho sentido, pero en fin si no las pongo simplemente no me genera nada de nuevo gracias Libras.
  #11 (permalink)  
Antiguo 21/10/2011, 08:45
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Validar Alias SQL, manejo de fechas!!!

Cita:
Iniciado por stuart_david3 Ver Mensaje
Solo la misma pregunta del post anterior, por que me arroja el error si no coloco alguna columna en el group by??... Muchísimas gracias Libras.
Cuando haces un group by va a agrupar por las columnas que tengas en tu clausula group by, y si en tu select pones una que no esta dentro de la agrupacion SQL no te la puede mostrar ya que dicha columna no compartiria los mismos criterios de la agrupacion.

Saludos!
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 21/10/2011, 08:58
Avatar de stuart_david3  
Fecha de Ingreso: agosto-2011
Mensajes: 215
Antigüedad: 13 años, 2 meses
Puntos: 1
Respuesta: Validar Alias SQL, manejo de fechas!!!

Y si por ejemplo quisiera agrupar solo por sexo, es decir que me salieran primero todos los masculinos y luego los femeninos o viceversa, ahm, supongo que tendría que poner en mi select y en mi group by primero el atributo sexo, digo como tengo que poner todos los campos que quiera usar en el select y en el group by, supongo que agrupara al primero que encuentre... Muchas gracias por tus respuestas =)...

Etiquetas: alias, fecha, sql, vs2010
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 12:59.