Miércoles, 30 Mayo 2012 15:57

Repetir los datos de una tabla

Escrito por
Valora este artículo
(0 votos)

Sinceramente no entiendo el motivo, ya que es una opción que nunca jamás permitiría en una base de datos modelada (o mantenida) por mí; pero en internet surgió la pregunta de cómo lograr hacer una interrogación que devuelva un cierto campo la cantidad de veces que está indicada en la misma tabla.

 

 

Por ejemplo, si tengo una tabla t1 con las columnas "dato" y "repetición" con los siguientes datos:

  Dato    Repeticion
'Uno'

1

'dos'

2

'tres'

3

 

 

 

 

Lo que se desea obtener es el siguiente resultado:

'Uno'
'Dos'
'Dos'
'Tres'
'Tres'
'Tres'

En otras palabras, el valor memorizado en la columna "dato" la cantidad de veces especificado en la columna "repeticion".

Como dice el proverbio, "hay más de un modo de pelar un gato" por lo que presento este modo usando cursor y una variable de tipo tabla:

declare @tabla as table(c1 varchar(30))
declare @palabra varchar(30)
declare @repeticiones int

declare cursorsito cursor for select dato, repeticion from t1
open cursorsito
fetch next from cursorsito into @palabra,@repeticiones
while @@FETCH_STATUS = 0
    begin
        while @repeticiones > 0
            begin
                insert into @tabla(c1) values (@palabra)
                select @repeticiones = @repeticiones - 1
            end
        fetch next from cursorsito into @palabra,@repeticiones
    end
close cursorsito
deallocate cursorsito
select * from @tabla

Lo que hago básicamente es declarar una variable de tipo tabla (que en un esfuerzo de imaginación llamé @tabla) con una única columna, donde iré memorizando los datos que quiero obtener en la respuesta.

Creo un cursor (llamado cursorsito) que contendrá los valores de la tabla del ejemplo, y lo recorro al interno de un ciclo while  (la función FETCH_STATUS() devuelve el valor 0 siempre que haya leído un renglón del cursor sin problemas).

Memorizo en la variable @palabra el valor de la columna dato y en la variable @repeticiones el valor de la columna repeticion. Por ejemplo, para el primer renglón del cursor tendré los siguientes valores:

@palabra = 'Uno'
@repeticiones = 1

en el ciclo while más interno inserto el valor memorizado en la variable @palabra dentro a la columna c1 de la variable @tabla.

Repito esta lógica para cada uno de los renglones de cursorsito, poblando la variable @tabla con el valor memorizado en @palabra la cantidad de veces indicado en @repeticiones (es más fácil programarlo que explicarlo...)

Al final del ciclo simplemente pido los datos memorizados en la variable @tabla, obteniendo el resultado deseado.

 

 

Leer 3812 veces Modificado por última vez en Viernes, 07 Noviembre 2014 16:44
Volver arriba