Ayuda con consulta....

02/10/2004 - 00:13 por Eusebio | Informe spam
Hola grupo,

estoy tratando de solucionar el sisguiente problema:


/*

Lo que se quiere es obtener una tabla que muestre
los intervalos en los cuales los registros se encuentran
marcados con la letra E (Estado = E )
Por ejemplo: del número 4 al 9 los registros se encuentran
marcados con estado "E" y además son consecutivos
osea que se insertarían en la tabla
Pero del 2 al 3, como el estado es "P" no se insertarían en la tabla.

La tabla entonces se vería asi:
=Inicial -- Final
=1 -- 1
4 -- 9
13 -- 13
17 -- 20
=
*/



Mil gracias por sus comentarios.
Eusebio M


El script de test es el siguiente:

create table #TestRangos ( Consecutivo int , Estado char(10) )

insert into #TestRangos VALUES ( 1 , 'P')
insert into #TestRangos VALUES ( 2 , 'E')
insert into #TestRangos VALUES ( 3 , 'E')
insert into #TestRangos VALUES ( 4 , 'P')
insert into #TestRangos VALUES ( 5 , 'P')
insert into #TestRangos VALUES ( 6 , 'P')
insert into #TestRangos VALUES ( 7 , 'P')
insert into #TestRangos VALUES ( 8 , 'P')
insert into #TestRangos VALUES ( 9 , 'P')
insert into #TestRangos VALUES ( 10 , 'E')
insert into #TestRangos VALUES ( 11 , 'E')
insert into #TestRangos VALUES ( 12 , 'E')
insert into #TestRangos VALUES ( 13 , 'P')
insert into #TestRangos VALUES ( 14 , 'E')
insert into #TestRangos VALUES ( 15 , 'E')
insert into #TestRangos VALUES ( 16 , 'E')
insert into #TestRangos VALUES ( 17 , 'P')
insert into #TestRangos VALUES ( 18 , 'P')
insert into #TestRangos VALUES ( 19 , 'P')
insert into #TestRangos VALUES ( 20 , 'P')


SELECT * FROM #TestRangos
 

Leer las respuestas

#1 qwalgrande
02/10/2004 - 01:33 | Informe spam
Hola.

Te propongo el siguiente mecanismo para rellenar la tabla de rangos

create table #Rangos (Inicial int, Final int)

declare @ini int, @fin int, @consec int, @estado char(1)
declare cur cursor for
select * from #TestRangos order by consecutivo

open cur

fetch next from cur into @consec, @estado
while @@fetch_status = 0
begin
if @estado = 'p'
begin
if exists (select * from #Rangos where Inicial = @ini)
update #Rangos set final = @consec where inicial = @ini
else
begin
insert #Rangos values (@consec, @consec)
select @ini = @consec
end
end
else
select @ini = 0
fetch next from cur into @consec, @estado
end

deallocate cur

select * from #Rangos


Espero que al menos te sirva como base y que puedas perfeccionarlo para
solventar tu problema.

qwalgrande

"Eusebio" wrote:

Hola grupo,

estoy tratando de solucionar el sisguiente problema:


/*

Lo que se quiere es obtener una tabla que muestre
los intervalos en los cuales los registros se encuentran
marcados con la letra E (Estado = E )
Por ejemplo: del número 4 al 9 los registros se encuentran
marcados con estado "E" y además son consecutivos
osea que se insertarían en la tabla
Pero del 2 al 3, como el estado es "P" no se insertarían en la tabla.

La tabla entonces se vería asi:
=> Inicial -- Final
=> 1 -- 1
4 -- 9
13 -- 13
17 -- 20
=>
*/



Mil gracias por sus comentarios.
Eusebio M


El script de test es el siguiente:

create table #TestRangos ( Consecutivo int , Estado char(10) )

insert into #TestRangos VALUES ( 1 , 'P')
insert into #TestRangos VALUES ( 2 , 'E')
insert into #TestRangos VALUES ( 3 , 'E')
insert into #TestRangos VALUES ( 4 , 'P')
insert into #TestRangos VALUES ( 5 , 'P')
insert into #TestRangos VALUES ( 6 , 'P')
insert into #TestRangos VALUES ( 7 , 'P')
insert into #TestRangos VALUES ( 8 , 'P')
insert into #TestRangos VALUES ( 9 , 'P')
insert into #TestRangos VALUES ( 10 , 'E')
insert into #TestRangos VALUES ( 11 , 'E')
insert into #TestRangos VALUES ( 12 , 'E')
insert into #TestRangos VALUES ( 13 , 'P')
insert into #TestRangos VALUES ( 14 , 'E')
insert into #TestRangos VALUES ( 15 , 'E')
insert into #TestRangos VALUES ( 16 , 'E')
insert into #TestRangos VALUES ( 17 , 'P')
insert into #TestRangos VALUES ( 18 , 'P')
insert into #TestRangos VALUES ( 19 , 'P')
insert into #TestRangos VALUES ( 20 , 'P')


SELECT * FROM #TestRangos



Preguntas similares