SQL - Repetir filas

   
Vista:

Repetir filas

Publicado por Antonio Galván galvan13@gmail.com (2 intervenciones) el 23/03/2017 14:22:43
Buenas tardes,
Necesito poder realizar un Split de una fila tantas veces como indica el campo "RowsNumber" a partir de la siguiente tabla:

PartNumber PartsSkid Quantity RowsNumber
NS041.1P 12 42 4
NS041.1P 12 183 16
NS041.1P 12 387 33
NS041.1P 12 138 12

Por ejemplo, para la primera fila, el resultado debería ser este:

PartNumber PartsSkid Quantity RowsNumber
NS041.1P 12 42 4
NS041.1P 12 42 4
NS041.1P 12 42 4
NS041.1P 12 42 4

Es decir, repetir la fila 4 veces tal y como indica RowsNumber.

¿Podéis echarme una mano para obtener este resultado?

Gracias!
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
Imágen de perfil de Isaias

Repetir filas

Publicado por Isaias (1068 intervenciones) el 23/03/2017 16:51:03
¿En SQL SERVER?, ¿Que version - edicion?
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

Repetir filas

Publicado por Isaias (1 intervención) el 23/03/2017 17:08:45
Suponiendo que fuera SQL Server


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
-- Creo una funcion de usuario que nos ayudara a realizar el split de los registros
CREATE FUNCTION NumbersTable (
  @fromNumber int,
  @toNumber int,
  @byStep int
)
RETURNS @NumbersTable TABLE (i int)
AS
BEGIN
  WITH CTE_NumbersTable AS (
    SELECT @fromNumber AS i
    UNION ALL
    SELECT i + @byStep
    FROM CTE_NumbersTable
    WHERE
      (i + @byStep) <= @toNumber
  )
  INSERT INTO @NumbersTable
  SELECT i FROM CTE_NumbersTable OPTION (MAXRECURSION 0)
 
  RETURN;
END
 
-- Creo mi tabla de prueba
Create table #repeatrows (PartNumber varchar(30), PartsSkid int, Quantity int, RowsNummber int)
 
-- Inserto los registros que publicaste
 
insert into #repeatrows values('NS041.1P', 12, 42, 4),
('NS041.1P',  12, 183, 16),
('NS041.1P',  12, 387, 33),
('NS041.1P',  12, 138 ,12)
 
 
-- Pruebo la funcion
SELECT * -- PartNumber, PartsSkid, Quantity, RowsNumber
FROM #repeatrows r
CROSS APPLY dbo.NumbersTable (1,r.RowsNummber,1) --n
ORDER BY PartNumber
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

Repetir filas

Publicado por Antonio Galvan galvan13@gmail.com (2 intervenciones) el 23/03/2017 18:09:10
Muchísimas gracias Isaias, me ha funcionado a la primera!! Enorme ayuda!!
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
Imágen de perfil de Isaias

Repetir filas

Publicado por Isaias (1068 intervenciones) el 23/03/2017 22:32:50
Excelente, 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