Obtener tantas líneas como valor en un campo (2009/09/07)

07/09/2009 - 12:38 por Mauricio | Informe spam
Hola a todos,
tengo esta select:
SELECT PRO_DESCRIPTION_LABEL, FT_NAME, OL_FOOD_REMARK, PRO_LABEL_TEXT,
PRO_HOWTOKEEP,
PRO_HOWTOPREPARE, PRO_DAYSINREFRIGERATOR, OL_Portion_Size, OL_Quantity,
(SELECT CAST(CFG_Value AS varchar(20)) AS Expr1
FROM dbo.MCS_Config
WHERE (CFG_Section = 'RECIPES') AND
(CFG_Field = 'PORTION_SIZE_' + CAST(dbo.MCS_OrderLines.OL_Portion_size
AS char(1))))
AS PORTION_TEXT,
PRO_CODE, FT_NUMBER, OL_QUANTITY
FROM MCS_ORDERLINES, MCS_ORDERS, MCS_PRODUCTS, MCS_FoodTypes
WHERE OL_ORD_ID = ORD_ID AND
OL_PRO_ID = PRO_ID AND
OL_FT_ID = FT_ID AND
OL_DATE BETWEEN '20090907 00:00:00' AND '20090907 23:59:59'

Para este día en particular tengo solo 1 registro y el valor en la
columna OL_QUANTITY es 2.
Cómo puedo hacer para obtener tantas líneas de resultado como valor
tenga en la columna OL_QUANTITY? En este caso, por ejemplo, debería
obtener 2 líneas, exactamente iguales.
Gracias a todos por la ayuda.
Saludos.

Mauricio
Copenhague, Dinamarca
 

Leer las respuestas

#1 Ruben Garrigos
07/09/2009 - 13:44 | Informe spam
Hola Mauricio,

Para solucionar tu necesidad te sería muy util que tuvieras una tabla de
números contra la que cruzar tu tabla. Esta tabla de números puede ser bien
física o bien autogenerada aunque ello te consuma una cierta cantidad de CPU.

Un ejemplillo de cómo hacer esto que te planteo es el siguiente, adáptalo
a tu tabla y necesidades concretas:

create table test (id int primary key,filas int);
insert into test values (1,1),(2,3),(3,4);
select test.* from test
join
(
SELECT n
FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY object_id )
FROM sys.objects ) D ( n )
WHERE n <= 100
) num100
on filas >= n;

Ten en cuenta que el ejemplo funcionará solo hasta 100 filas como máximo
pues es ese el tamaño de la tabla de números generada. También ten en cuenta
que en el ejemplo he utilizado sintaxis de SQL 2008 por lo que puede que
tengas que hacer algún cambio para adaptarlo a tu versión.

Un saludo,

Rubén Garrigós
Solid Quality Mentors

Blog: http://blogs.solidq.com/es/elrincondeldba

Hola a todos,
tengo esta select:
SELECT PRO_DESCRIPTION_LABEL, FT_NAME, OL_FOOD_REMARK, PRO_LABEL_TEXT,
PRO_HOWTOKEEP,
PRO_HOWTOPREPARE, PRO_DAYSINREFRIGERATOR, OL_Portion_Size,
OL_Quantity,
(SELECT CAST(CFG_Value AS varchar(20)) AS Expr1
FROM dbo.MCS_Config
WHERE (CFG_Section = 'RECIPES') AND
(CFG_Field = 'PORTION_SIZE_' + CAST(dbo.MCS_OrderLines.OL_Portion_size
AS char(1))))
AS PORTION_TEXT,
PRO_CODE, FT_NUMBER, OL_QUANTITY
FROM MCS_ORDERLINES, MCS_ORDERS, MCS_PRODUCTS, MCS_FoodTypes
WHERE OL_ORD_ID = ORD_ID AND
OL_PRO_ID = PRO_ID AND
OL_FT_ID = FT_ID AND
OL_DATE BETWEEN '20090907 00:00:00' AND '20090907 23:59:59'
Para este día en particular tengo solo 1 registro y el valor en la
columna OL_QUANTITY es 2.
Cómo puedo hacer para obtener tantas líneas de resultado como valor
tenga en la columna OL_QUANTITY? En este caso, por ejemplo, debería
obtener 2 líneas, exactamente iguales.
Gracias a todos por la ayuda.
Saludos

Preguntas similares