SQL Server - Completar Periodos

 
Vista:
sin imagen de perfil

Completar Periodos

Publicado por Estudiante (3 intervenciones) el 02/07/2017 19:19:09
Buen día amigos, verán llevo varios días en esto y ya no se me ocurre nada mas, necesito ayuda con esto:

LO-QUE-DEBE-SALIR

Lo de la izquierda son los datos que están en la base de datos, la derecha es como debe salir. al hacer una consulta, vista o procedimiento.
el campo suministro esta como int, pfactura esta como int, y fechaejecucion1 esta como date. Lo que necesito es que solo poniendo el periodo(pfactura) inicial y el periodo(pfactura) final, se muestren en la consulta todos estos pfactura por cada suministro(los que ya estan ya no obviamente, solo se agregarian los pfactura q faltarian), en la imagen puse de inicio 201508 y de fin 201603 y en la fechaejecucion normal que aparezca NULL. Hasta ahora solo he podido crear un procedimiento que dandole una fecha inicial y otra final, me extrae año y mes y hago conversiones y me muestra todos los periodos(pfactura), pero no he podido lograr mi cometido de mostrarlo por cada suministro. Espero su ayuda. Muchas gracias. le adjunto el procedimiento que avanze.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
create PROCEDURE sp_Completar2
   @FechaInicio DateTime,
   @FechaCierre DateTime
AS
BEGIN
    SET NOCOUNT ON;
 
    -- Tabla temporal con las fechas de inicio y cierre
    CREATE TABLE #Temp(
                        Fecha dateTime
                        )
    DECLARE @date DATETIME
    SET @date = @FechaInicio
    WHILE @date < @FechaCierre + 1
    BEGIN
        INSERT INTO #Temp
        VALUES(@date)
        SET @date = dateadd(mm,1, @date)
    END
 
	select p.suministro,p.pfactura,cast(convert(varchar(6),t.Fecha,112) as int) as TotalPeriodos,p.fechaejecucion1
 
    from  #Temp t
    full JOIN dbo.Pfact p
   	ON t.Fecha = convert(date,convert(char(8),((p.pfactura*100)+1)))
	/*ON t.Fecha = p.pfactura */
	group by p.suministro,p.pfactura,p.fechaejecucion1,t.Fecha order by p.suministro,t.Fecha
END
 
 
 
 
exec sp_Completar2 '01/01/2015','01/12/2016'
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Completar Periodos

Publicado por Isaias (4558 intervenciones) el 03/07/2017 18:33:07
¿Para que crea una tabla TEMPORAL solo para hacer un JOIN con su tabla Pfact?, no seria un simple WHERE con la fecha inicial y la final..
¿Que version de datos esta manejando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Completar Periodos

Publicado por Estudiante (3 intervenciones) el 03/07/2017 18:56:13
Si tiene razon, fue una idea que se me ocurrio de las tantas fallidas. Version de sql? es el 2008
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias
Val: 3.250
Oro
Ha mantenido su posición en SQL Server (en relación al último mes)
Gráfica de SQL Server

Completar Periodos

Publicado por Isaias (4558 intervenciones) el 03/07/2017 19:43:49
Estoy revisando esta linea:

1
select convert(date,convert(char(8),((getdate()*100)+1)))

Me manda el siguiente mensaje:

Msg 257, Level 16, State 3, Line 1
Implicit conversion from data type datetime to int is not allowed. Use the CONVERT function to run this query.

Lo que te comento es que deberias colocar en tu WHERE, simplemente el rango de registros que deseas mediante tus parametros de FECHA INCIAL y FECHA FINAL
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar