Repetición de registros

06/06/2007 - 17:12 por P.Roca | Informe spam
Hola,

Como puedo hacer una select pero duplicando álgunos registros según el valor
de otro campo?
gracias.

Preguntas similare

Leer las respuestas

#1 Gustavo Larriera (MVP)
07/06/2007 - 00:54 | Informe spam
Puedes darnos un ejemplo? Y para qué quieres eso?

A primera vista suena a algo muy patológico lo que quieres hacer:
Generar datos que no existen :-)

Gustavo Larriera, Microsoft MVP
https://mvp.support.microsoft.com/p...o.Larriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.

In article ,
says...
Hola,

Como puedo hacer una select pero duplicando álgunos registros según el valor
de otro campo?
gracias.



Respuesta Responder a este mensaje
#2 Jesús López
07/06/2007 - 09:46 | Informe spam
Como dice Gustavo, eso suena muy patológico, pero parece divertido :-) así
que aquí tienes un ejemplo para SQL Server 2005:


CREATE FUNCTION GenerateNumbers(
@n int
) RETURNS TABLE
AS RETURN (
WITH CTE(n)
AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 AS n
FROM CTE
WHERE n < @n
)
SELECT TOP(@n) n
FROM CTE
)
GO

CREATE TABLE T (
Field varchar(50),
Records int
)
GO
INSERT INTO T VALUES('Record 1', 1)
INSERT INTO T VALUES('Record 2', 0)
INSERT INTO T VALUES('Record 3', 2)
INSERT INTO T VALUES('Record 4', 3)

GO

SELECT T.*
FROM T CROSS APPLY GenerateNumbers(Records)
OPTION (MAXRECURSION 0)


Ahora a lo mejor me dices que no usas SQL Server 2005. Eso ya no me parece
tan divertido, sin CTE's y CROSS APLY ya no es tan fácil hacerlo.

Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"P.Roca" escribió en el mensaje
news:
Hola,

Como puedo hacer una select pero duplicando álgunos registros según el
valor
de otro campo?
gracias.


Respuesta Responder a este mensaje
#3 Miguel Egea
07/06/2007 - 10:03 | Informe spam
Hola ¿pablo? si eres quien creo encantado de hablar contigo, que siempre es
un gusto :)

Aquí tienes un ejemplo, está escrito para sql2005, pero la idea es la misma,
tener una tabla con los números del uno al N y luego usarla para hacer join
con la tuya.

use pruebas
go
drop table demo
drop table nums
go
create table demo (id smallint identity(1,1) primary key,
foo char(20) not null default 'hola')
go
declare @i int
set @i
while @i>0
begin
insert into demo default values
set @i=@i-1
end
go

insert into demo (foo) values('Dos')
insert into demo (foo) values('Tres')
go
create table nums (num smallint)
go
with Recu(id) as
(
select 1 as id
union all
select id +1 from Recu where id<10000
)
insert into nums(num)
select id from Recu option(maxrecursion 0)
go
select d.*
From demo d
inner join nums n
on case d.foo when 'Dos' then 2 when 'Tres' then 3 else 1 end>=n.num



"P.Roca" wrote in message
news:
Hola,

Como puedo hacer una select pero duplicando álgunos registros según el
valor
de otro campo?
gracias.


Respuesta Responder a este mensaje
#4 Miguel Egea
07/06/2007 - 10:27 | Informe spam
otra solución :), voy a pulbicarla también en mi blog, ¡Gracias jesús!

Saludos Cordiales
Miguel Egea Gómez
http://blogs.solidq.com/ES/megea/default.aspx
http://www.portalsql.com
Solid Quality Mentors


"Jesús López" wrote in message
news:
Como dice Gustavo, eso suena muy patológico, pero parece divertido :-) así
que aquí tienes un ejemplo para SQL Server 2005:


CREATE FUNCTION GenerateNumbers(
@n int
) RETURNS TABLE
AS RETURN (
WITH CTE(n)
AS
(
SELECT 1 AS n
UNION ALL
SELECT n + 1 AS n
FROM CTE
WHERE n < @n
)
SELECT TOP(@n) n
FROM CTE
)
GO

CREATE TABLE T (
Field varchar(50),
Records int
)
GO
INSERT INTO T VALUES('Record 1', 1)
INSERT INTO T VALUES('Record 2', 0)
INSERT INTO T VALUES('Record 3', 2)
INSERT INTO T VALUES('Record 4', 3)

GO

SELECT T.*
FROM T CROSS APPLY GenerateNumbers(Records)
OPTION (MAXRECURSION 0)


Ahora a lo mejor me dices que no usas SQL Server 2005. Eso ya no me parece
tan divertido, sin CTE's y CROSS APLY ya no es tan fácil hacerlo.

Saludos:

Jesús López.
Solid Quality Mentors
www.solidq.com

"P.Roca" escribió en el mensaje
news:
Hola,

Como puedo hacer una select pero duplicando álgunos registros según el
valor
de otro campo?
gracias.






email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida