SQL Server - Select complicada

   
Vista:

Select complicada

Publicado por Begoña (2 intervenciones) el 22/02/2011 11:35:25
Buenos días,
Necesito vuestra ayuda...

Tengo una tabla con tres campos: Descripcion, valor, num_copias.
Necesito una select (una única sentencia) que me obtenga tantos registros de cada registro como marque el campo num_copias.
Por ejemplo si tengo en mi tabla:

Descripcion1, 12, 3
Descripcion2,10,1
Descripcion3,10,0
Descripcion4, 10,2

Me devuelva lo siguiente:

Descripcion1, 12
Descripcion1, 12
Descripcion1, 12
Descripcion2,10
Descripcion4, 10
Descripcion4, 10

¿Es esto posible?

Muchas gracias a todos de antemano,
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

Select complicada

Publicado por Matías (5 intervenciones) el 15/03/2011 03:45:46
No entiendo bien lo que quieres, pero podría ser mas facil si generaras una vista intermedia para ayudarte.,
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

RE:Select complicada

Publicado por Loría (56 intervenciones) el 22/02/2011 19:16:35
Begoña,

Esta es una tarea que me parece sería mejor hacerlo por medio del lenguaje de programación que utilizas. Si no queda de otra opción que hacerla por medio de SQL podrías utilizar un cursor así:

DECLARE @Tbl TABLE(
descripcion NVARCHAR(100),
valor NVARCHAR(100),
num_copias SMALLINT
)

INSERT INTO @Tbl
SELECT 'Descripción1','12','3' UNION ALL
SELECT 'Descripción2','10','1' UNION ALL
SELECT 'Descripción3','10','0' UNION ALL
SELECT 'Descripción4','10','2'

DECLARE @Tbl2 TABLE(
descripcion NVARCHAR(100),
valor NVARCHAR(100)
)

DECLARE @descripcion VARCHAR(50)
DECLARE @valor SMALLINT
DECLARE @num_copias SMALLINT

DECLARE CursorCopias CURSOR FOR
SELECT descripcion,valor,num_copias FROM @Tbl
OPEN CursorCopias
FETCH NEXT FROM CursorCopias
INTO @descripcion,@valor,@num_copias
WHILE @@fetch_status = 0
BEGIN

WHILE (@num_copias<>0)
BEGIN
INSERT INTO @Tbl2 VALUES (@descripcion,@valor)
SET @num_copias = @num_copias - 1
END

FETCH NEXT FROM CursorCopias
INTO @descripcion,@valor,@num_copias
END
CLOSE CursorCopias
DEALLOCATE CursorCopias

SELECT * FROM @Tbl2

Ahí puedes acomodar los nombres a como los necesites, y guardar el código en un SP. Repito, lo ideal sería hacerlo desde el lenguaje de programación, los cursores dañan mucho el rendimiento del servidor si se trata de vólumnes de datos muy grandes, ten MUY en cuenta eso.

Saludos.
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

RE:Select complicada

Publicado por Begoña (2 intervenciones) el 23/02/2011 19:17:23
Muchas gracias,

Si, con procedimientos almacenados o código es relativamente sencillo...

Pero es posible realizarlo con una única select? Tengo una aplicación de terceros para la impresión de etiquetas, que sólo permite realizar busquedas para imprimir a través de sentencias SELECT.

Muchas gracias de nuevo por el esfuerzo realizado al intentar ayudarme.
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

RE:Select complicada

Publicado por Loría (56 intervenciones) el 25/02/2011 15:34:59
Begoña,

¿Solo puedes ejecutar SELECT's? Porque eventualmente se podría hacer llamando un procedimiento almacenado.

Saludos.
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