Deberiamos tener un subforo de programacion pero bueno...lo abro aki
LLevo rato intentado cuadrar esta consulta este es el escenario, tengo unprograma que al inicio y cierre de secion, se guarda en una tabla de logueo, el id de usuario-fecha-tipo(1 para inicio,2 para cierre) y despues se requiere ver por semana quienes se logearon y a que hora.
Por ejemplo esta seria la tabla de log
idUsuario----Tipo--------------Fecha
1----------------1-----------------Nov 25 2009 10:41PM
1----------------2-----------------Nov 25 2009 10:42PM
2---------------- 1-----------------Nov 25 2009 10:45PM
2----------------2 -----------------Nov 25 2009 10:47PM
2----------------1-----------------Nov 26 2009 9:49AM
2---------------- 2-----------------Nov 26 2009 9:49AM
1---------------- 1-----------------Nov 26 2009 9:49AM
1---------------- 2-----------------Nov 26 2009 9:49AM
Esa misma la paso a la siguiente tabla temporal
IDusuario-------Dia--------Hora--------Tipo
1.............. Miércoles....22:41......1
1..............Miércoles.....22:42......2
2..............Miércoles.....22:45......1
2..............Miércoles.....22:47......2
2..............Jueves ........9:49......1
2..............Jueves ........9:50...... 2
1..............Jueves........9:51...... 1
1..............Jueves........9:55......2
Y lo que quiero retornar es
Idusuario tipo Miercoles Jueves
1 ..............1................22:41.............9:49
1 ..............2................22:42.............9:50
2 ..............1................22:45.............9:51
2 .............. 2................ 22:47............9:55
He estado investigando mucho rato acerca de cursores y Fecth, pero esa me da un error por en las columnas "nuevas" miercoles y jueves lo llena de "null"(adjunto el script por si alguien lo puede revisar, se cae a la ahora de actualizar las columnas) ....tambien estube revisando el uso del PIVOT pero no me quedo muy claro y no lo he podido cuadrar
Por Favor si alguien me puede ayudar seria de gran ayuda ! ! ! ! !
	
	
	
		
	
		
			
		
		
	
				
			LLevo rato intentado cuadrar esta consulta este es el escenario, tengo unprograma que al inicio y cierre de secion, se guarda en una tabla de logueo, el id de usuario-fecha-tipo(1 para inicio,2 para cierre) y despues se requiere ver por semana quienes se logearon y a que hora.
Por ejemplo esta seria la tabla de log
idUsuario----Tipo--------------Fecha
1----------------1-----------------Nov 25 2009 10:41PM
1----------------2-----------------Nov 25 2009 10:42PM
2---------------- 1-----------------Nov 25 2009 10:45PM
2----------------2 -----------------Nov 25 2009 10:47PM
2----------------1-----------------Nov 26 2009 9:49AM
2---------------- 2-----------------Nov 26 2009 9:49AM
1---------------- 1-----------------Nov 26 2009 9:49AM
1---------------- 2-----------------Nov 26 2009 9:49AM
Esa misma la paso a la siguiente tabla temporal
IDusuario-------Dia--------Hora--------Tipo
1.............. Miércoles....22:41......1
1..............Miércoles.....22:42......2
2..............Miércoles.....22:45......1
2..............Miércoles.....22:47......2
2..............Jueves ........9:49......1
2..............Jueves ........9:50...... 2
1..............Jueves........9:51...... 1
1..............Jueves........9:55......2
Y lo que quiero retornar es
Idusuario tipo Miercoles Jueves
1 ..............1................22:41.............9:49
1 ..............2................22:42.............9:50
2 ..............1................22:45.............9:51
2 .............. 2................ 22:47............9:55
He estado investigando mucho rato acerca de cursores y Fecth, pero esa me da un error por en las columnas "nuevas" miercoles y jueves lo llena de "null"(adjunto el script por si alguien lo puede revisar, se cae a la ahora de actualizar las columnas) ....tambien estube revisando el uso del PIVOT pero no me quedo muy claro y no lo he podido cuadrar
Por Favor si alguien me puede ayudar seria de gran ayuda ! ! ! ! !
		Code:
	
	set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author:		
-- Create date: 
-- Description:	 Este procedimiento se encarga de consultar la tabla de logueo
-- Donde las fechas coincidan, posteriormente crea un tabla curzada donde 
-- se aprecien las columnas correspondientes a los dias de la semana, 
-- conteniendo en cada campo el usuario, el tipo de registro y la hora
-- =============================================
ALTER PROCEDURE LogeoSelect
--(
	--@fecha1	varchar(20),
	--@fecha2	varchar(20)
--)
AS
SET NOCOUNT ON
-- crear tabla temporal de datos filtrados
if exists (select * from tab1)
drop table tab1
GO
---- ojo: en esta la fecha es nvarchar
CREATE TABLE tab1 (idusuario int NOT NULL, fecha nvarchar(20) NOT NULL, hora nvarchar(20) NOT NULL, tipo int NULL)
GO
-- insertar datos filtrados, con la fecha convertida al dia correspondiente
INSERT INTO tab1 (idusuario, fecha,hora, tipo) 
	SELECT  idcuentas,
			datename(dw,fecha),
            datename(hh,fecha)+':'+datename(n,fecha),
			tipo
	FROM 
		logeo
	WHERE
		fecha BETWEEN  'Nov 01 2009' AND 'Nov 27 2009' 
if exists (select * from tab2) 
drop table tab2
GO
--tabla de resultados
CREATE TABLE tab2 (usuario int, tipo int)
GO
-- insertar usuarios
INSERT INTO tab2 (usuario,tipo)
	SELECT  idusuario,tipo FROM tab1
-- cursor
DECLARE encabezados CURSOR FOR 
	SELECT  fecha FROM tab1
-- abrir cursor
OPEN encabezados
-- variable para crear las columnas
DECLARE @encabezado nvarchar(50)
-- variables para definir las consultas en tiempo de ejecución
DECLARE @exec1 nvarchar(100)
DECLARE @exec2 nvarchar(100)
--Variable para comparar si ya se añadio la columna
DECLARE @tempE  nvarchar(50)
--  crear cursor para recorrer la tabla de datos filtrados
FETCH NEXT FROM encabezados INTO @encabezado
	
-- mientras haya datos...
WHILE @@FETCH_STATUS = 0
BEGIN
	-- por cada fecha, agregar una columna
SET @exec1 = 'ALTER TABLE tab2 ADD [' + @encabezado + '] nvarchar(20) '	
--Si es igual a tempE significa que ya fue agregada
if not @tempE = @encabezado
	EXECUTE (@exec1)
	-- actualizar la columna nueva con los valores
--AQUI SE ESTA CAYENDO
	SET @exec2 = 'UPDATE tab2 SET ' +  @encabezado + ' = t1.hora ' +
          'FROM tab1 t1 INNER JOIN tab2 t2 ON t1.idusuario = t2.usuario ' +
		  'WHERE t1.fecha=' + @encabezado 
	EXECUTE (@exec2)
	
set @tempE = @encabezado
	-- siguiente registro
	FETCH NEXT FROM encabezados INTO @encabezado
     
END
CLOSE encabezados
DEALLOCATE encabezados
SELECT * FROM tab2
RETURNAttachments
		Solo los foreros registrados pueden disfrutar ver los archivos adjuntos.
	
				
			 
	 
 
		 
  
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
  
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		 
 
		