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

Separación de registros

Estas en el tema de Separación de registros en el foro de SQL Server en Foros del Web. Saludos comunidad, tengo el siguiente Query: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código SQL: Ver original DECLARE @Fecha DATE , @term INT = NULL , @depto INT = NULL ...
  #1 (permalink)  
Antiguo 12/11/2012, 14:53
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 11 meses
Puntos: 2
Separación de registros

Saludos comunidad, tengo el siguiente Query:

Código SQL:
Ver original
  1. DECLARE
  2. @Fecha DATE,@term INT=NULL,@depto INT=NULL
  3. SELECT p.id_ref_externa AS 'Id_personal',
  4. t.descripcion AS 'Terminal',
  5. d.desc_depto AS 'Departamento',
  6. p.nombre AS 'Nombre',
  7. CONVERT(TIME,h.hora_entrada) AS 'Hora-Entrada'
  8. FROM corporativodb.dbo.corp_personal p
  9. INNER JOIN corporativodb.dbo.corp_terminales t ON t.id=p.id_terminal
  10. INNER JOIN corporativodb.dbo.corp_depto d ON d.id_depto=p.id_depto
  11. INNER JOIN corporativodb.dbo.corp_horarios h ON h.id_grupo_horario=p.id_grupo_horario
  12. WHERE NOT EXISTS
  13. (SELECT * FROM corporativodb.dbo.corp_asistencia a  WHERE a.id_personal=p.id_personal AND CONVERT(DATE,fecha_asistencia,108)=@Fecha)
  14. AND NOT EXISTS
  15. (SELECT * FROM transmaquiladb.dbo.tm_transfer_registroAsistencia ab WHERE ab.id_personal=p.id_ref_externa AND CONVERT(DATE,AB.fechahora_Evento,108)=@Fecha)
  16. AND
  17. ((@term IS NULL) OR (t.id=@term))
  18. AND
  19. ((@depto IS NULL)OR(d.id_depto=@depto))
  20. AND
  21. p.estatus_personal=1
  22. AND
  23. p.id_categoria IS NULL
  24. ORDER BY p.id_terminal

Y me trae los siguientes datos:
---ID---Ter----Departamento-----NombreEmpleado--Horario
10447--400--TRAFICO TRANSFER--MACIEL JUAN PABLO--08:00
10447--400--TRAFICO TRANSFER--MACIEL JUAN PABLO--16:00
10447--400--TRAFICO TRANSFER--MACIEL JUAN PABLO--08:00
10578--400--TRAFICO TRANSFER--MIRELES HECTOR--07:30:00
10578--400--TRAFICO TRANSFER--MIRELES HECTOR--14:00:00
10578--400--TRAFICO TRANSFER--MIRELES HECTOR--07:30:00

Quiero que me muestre los datos asi ahora....
10447--400--TRAFICO TRANSFER--MACIEL JUAN PABLO--08:00
10578--400--TRAFICO TRANSFER--MIRELES HECTOR--07:30:00

Que me traiga solo el primer registro, intente hacer agrupaciones pero sin éxito, intente usar el MAX y MIN, pero tampoco tuve éxito, vi otra funcion llamada Row_NUMBER() pero la verdad no supe como adaptarla a esta necesidad, espero me puedan orientar.
  #2 (permalink)  
Antiguo 12/11/2012, 15:36
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: Separación de registros

a lo que entiendo quieres separar por nombre verdad?? entonces con row_number seria algo asi

select dato1,dato2,dato3, nombre, row_number() over(partition by nombre order by nombre asc) as rn from tabla

en este caso para adaptarlo a tu problema seria:


Código SQL:
Ver original
  1. DECLARE
  2.     @Fecha DATE,@term INT=NULL,@depto INT=NULL
  3.  
  4. SELECT * FROM (
  5.     SELECT p.id_ref_externa AS 'Id_personal',
  6.     t.descripcion AS 'Terminal',
  7.     d.desc_depto AS 'Departamento',
  8.     p.nombre AS 'Nombre',
  9.     ROW_NUMBER() OVER(partition BY p.nombre ORDER BY p.nombre) AS rn,
  10.     CONVERT(TIME,h.hora_entrada) AS 'Hora-Entrada'
  11.     FROM corporativodb.dbo.corp_personal p
  12.     INNER JOIN corporativodb.dbo.corp_terminales t ON t.id=p.id_terminal
  13.     INNER JOIN corporativodb.dbo.corp_depto d ON d.id_depto=p.id_depto
  14.     INNER JOIN corporativodb.dbo.corp_horarios h ON h.id_grupo_horario=p.id_grupo_horario
  15.     WHERE NOT EXISTS
  16.     (SELECT * FROM corporativodb.dbo.corp_asistencia a  WHERE a.id_personal=p.id_personal AND CONVERT(DATE,fecha_asistencia,108)=@Fecha)
  17.     AND NOT EXISTS
  18.     (SELECT * FROM transmaquiladb.dbo.tm_transfer_registroAsistencia ab WHERE ab.id_personal=p.id_ref_externa AND CONVERT(DATE,AB.fechahora_Evento,108)=@Fecha)
  19.     AND
  20.     ((@term IS NULL) OR (t.id=@term))
  21.     AND
  22.     ((@depto IS NULL)OR(d.id_depto=@depto))
  23.     AND
  24.     p.estatus_personal=1
  25.     AND
  26.     p.id_categoria IS NULL
  27. ) t1 WHERE rn=1
  28.     ORDER BY t1.id_terminal

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 12/11/2012, 15:44
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Separación de registros

Estuve intentando la consulta y me arroja :

Msg 102, Level 15, State 1, Line 6
Sintaxis incorrecta cerca de ' '.
Msg 102, Level 15, State 1, Line 8
Sintaxis incorrecta cerca de ' '.
Msg 102, Level 15, State 1, Line 9
Sintaxis incorrecta cerca de ' '.
Msg 102, Level 15, State 1, Line 19
Sintaxis incorrecta cerca de ' '.
Msg 137, Level 15, State 2, Line 21
Debe declarar la variable escalar "@Fecha".

Trate de ver donde podía acomodar algunas partes pero nada, me seguí marcando eso...y gracias por la respuesta
  #4 (permalink)  
Antiguo 12/11/2012, 16:07
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: Separación de registros

puedes poner tu query "nuevo"??
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 12/11/2012, 16:35
 
Fecha de Ingreso: junio-2012
Mensajes: 90
Antigüedad: 11 años, 11 meses
Puntos: 2
Respuesta: Separación de registros

Ya quedo resuelto, el problema era que si lo copiaba tal cual en el sql, quedaban algunos espacios, casi invisibles, pero ya función perfectamente, al principio no entendía por que el WHERE rn=1, pero ya lo comprendí, muchísimas gracias compa!
  #6 (permalink)  
Antiguo 12/11/2012, 16: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: Separación de registros

where rn=1 porque querias la primer incidencia :) que bien que ya funciono :) y de nada compa :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #7 (permalink)  
Antiguo 13/11/2012, 03:18
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Separación de registros

Me parece que el Row_Number debe ser así:
row_number() over(partition BY P.ID ORDER BY convert(time,h.hora_entrada)) AS rn
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog

Etiquetas: query, registro, registros, select
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 13:01.