Generar una consulta con trimestres

21/04/2007 - 17:32 por David | Informe spam
tengo una tabla donde contengo los trimestres del año

Codigo Trimestre Mes
1 PRIMER TRIMESTRE ABRIL
2 SEGUNDO TRIMESTRE JULIO
3 TERCER TRIMESTRE OCTUBRE
4 CUARTO TRIMESTRE ENERO

ahora el problema es que tengo que realizar una consulta donde genere los
trimestre pendientes de una empresa para presentar documentos hasta el
trimestre actual, lo haci de la siguiente manera

declare @fecharegistro datetime
set @fecharegistro = '04/20/2006'
declare @codigoempresa int
set @codigoempresa9

SET LANGUAGE Español
create table #TrimEmpresa (CodigoTrimestre int,Trimestre
varchar(50),MesPresentar varchar(10),fechadesde datetime,fechahasta
datetime,FechaLimite datetime,Estado int, codigoempresa int, gestion
varchar(4))
declare @año varchar(4)
declare @gestion varchar(4)
declare @fechacompleto datetime
from empresa where codigoempresa =@codigoempresa )
set @año= year(@fecharegistro)
set @fechacompleto =@fecharegistro
insert into #TrimEmpresa
select codigotrimestre,trimestre,mespresentar,
CONVERT(char(10),'01/'+CASE WHEN len(rtrim(mesdel))= 1 then '0' +
rtrim(mesdel) else rtrim(mesdel) END +'/' + @año,103),
CONVERT(CHAR(10), ISNULL(DATEADD(D, -1, (DATEADD(M, 1, '01/' + CASE WHEN
len(rtrim(mesal))= 1 then '0' + rtrim(mesal) else rtrim(mesal) END +'/' +
@AÑO)) ), ' '), 103) as ultimo,
CONVERT(CHAR(10), ISNULL(DATEADD(D, -1, (DATEADD(M, 1, '01/' + CASE WHEN
len(rtrim(MesLimite))= 1 then '0' + rtrim(MesLimite) else rtrim(MesLimite)
END +'/' + @AÑO)) ), ' '), 103) as limite,0,@codigoempresa, @año
from trimestres
insert into TrimEmpresas select * from #TrimEmpresa where fechahasta >
@fechacompleto
drop table #TrimEmpresa
SET LANGUAGE us_english


el problema es que solo te genera de todo el año si es de la gestion 2006
todo del 2006 o si es del 2007 todo del 2007 y lo que necesito es que si
fuera de la gestion 2006 me genere todos lo trimestres del 2006 hasta el
actual del 2007.

Espero me puedan ayudar intente hacer pero sin un buen resultado.

uso sql server 2000

Saludos
 

Leer las respuestas

#1 Javier Loria
23/04/2007 - 01:01 | Informe spam
Hola David:
Eliminando la tabla temporal y haciendo un CROSS JOIN con un consecutivo
de años.
Puedes probar esto:
==declare @fecharegistro datetime
set @fecharegistro = '04/20/2006'
declare @codigoempresa int
set @codigoempresa9

SET LANGUAGE Español;

INSERT INTO TrimEmpresas(CodigoTrimestre, Trimestre, MesPresentar,
fechadesde, fechahasta, FechaLimite, Estado, codigoempresa, gestion)
SELECT codigotrimestre
, trimestre
, mespresentar
, CONVERT(char(10),'01/'+CASE WHEN len(rtrim(mesdel))= 1 then '0' +
rtrim(mesdel) else rtrim(mesdel) END +'/' + Año,103) AS fechadesde
, CONVERT(CHAR(10)
, ISNULL(DATEADD(D, -1, (DATEADD(M, 1, '01/' + CASE WHEN
len(rtrim(mesal))= 1 then '0' + rtrim(mesal)
else rtrim(mesal) END +'/' + Año)) ), ' ')
, 103) as fechahasta
, CONVERT(CHAR(10)
, ISNULL(DATEADD(D, -1
, (DATEADD(M, 1, '01/' + CASE WHEN len(rtrim(MesLimite))= 1 then '0' +
rtrim(MesLimite) else rtrim(MesLimite) END +'/' + Año)) ), ' ')
, 103) as FechaLimite
, 0 AS Estado
, @codigoempresa AS codigoempresa
, Años.Año AS Gestion
FROM trimestres
CROSS JOIN (SELECT year(@fecharegistro)+Numero AS AñO
FROM (SELECT 0 AS Numero UNION ALL
SELECT 1 UNION ALL
SELECT 2 UNION ALL
SELECT 3 UNION ALL
SELECT 4) AS Numeros
WHERE Numero BETWEEN 0 AND Year(getdate())-year(@fecharegistro)) as
Años
WHERE fechahasta>@fecharegistro
== Esta consulta esta limitada a cinco años despues de la fecha de
registro, si esto no es suficiente puedes agregar mas UNION ALL o todavia
mejor agregar una tabla de numeros con valores del 1 al 10000.
Saludos,

Javier Loria
Costa Rica (MVP)
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.

"David" wrote in message
news:
tengo una tabla donde contengo los trimestres del año

Codigo Trimestre Mes
1 PRIMER TRIMESTRE ABRIL
2 SEGUNDO TRIMESTRE JULIO
3 TERCER TRIMESTRE OCTUBRE
4 CUARTO TRIMESTRE ENERO

ahora el problema es que tengo que realizar una consulta donde genere los
trimestre pendientes de una empresa para presentar documentos hasta el
trimestre actual, lo haci de la siguiente manera

declare @fecharegistro datetime
set @fecharegistro = '04/20/2006'
declare @codigoempresa int
set @codigoempresa9

SET LANGUAGE Español
create table #TrimEmpresa (CodigoTrimestre int,Trimestre
varchar(50),MesPresentar varchar(10),fechadesde datetime,fechahasta
datetime,FechaLimite datetime,Estado int, codigoempresa int, gestion
varchar(4))
declare @año varchar(4)
declare @gestion varchar(4)
declare @fechacompleto datetime
fecharegistro from empresa where codigoempresa =@codigoempresa )
set @año= year(@fecharegistro)
set @fechacompleto =@fecharegistro
insert into #TrimEmpresa
select codigotrimestre,trimestre,mespresentar,
CONVERT(char(10),'01/'+CASE WHEN len(rtrim(mesdel))= 1 then '0' +
rtrim(mesdel) else rtrim(mesdel) END +'/' + @año,103),
CONVERT(CHAR(10), ISNULL(DATEADD(D, -1, (DATEADD(M, 1, '01/' + CASE WHEN
len(rtrim(mesal))= 1 then '0' + rtrim(mesal) else rtrim(mesal) END +'/' +
@AÑO)) ), ' '), 103) as ultimo,
CONVERT(CHAR(10), ISNULL(DATEADD(D, -1, (DATEADD(M, 1, '01/' + CASE WHEN
len(rtrim(MesLimite))= 1 then '0' + rtrim(MesLimite) else rtrim(MesLimite)
END +'/' + @AÑO)) ), ' '), 103) as limite,0,@codigoempresa, @año
from trimestres
insert into TrimEmpresas select * from #TrimEmpresa where fechahasta >
@fechacompleto
drop table #TrimEmpresa
SET LANGUAGE us_english


el problema es que solo te genera de todo el año si es de la gestion 2006
todo del 2006 o si es del 2007 todo del 2007 y lo que necesito es que si
fuera de la gestion 2006 me genere todos lo trimestres del 2006 hasta el
actual del 2007.

Espero me puedan ayudar intente hacer pero sin un buen resultado.

uso sql server 2000

Saludos

Preguntas similares