2010-06-16 13 views
6

¿Es posible hacer una combinación en el servidor SQL que une cada fila de la tabla A a n filas aleatorias en otra? Por ejemplo, supongamos que tengo una tabla de clientes, una tabla de productos y una tabla de pedidos. Quiero unir a cada cliente a 5 productos aleatorios e insertar estas filas en la tabla de pedidos. (Y cada cliente debe estar unido a 5 filas aleatorias propias, no quiero que todos los clientes se unan a las mismas 5 filas).Unir una sola fila en una tabla para n filas aleatorias en otra

¿Esto es posible? Estoy usando SQL Server 2005 y está bien si la solución es específica para eso.

Este es un requisito extraño, pero básicamente estoy creando un pequeño generador de datos para generar algunos datos aleatorios.

Respuesta

6

Tenga una mirada en algo como esto

DECLARE @Products TABLE(
     id Int, 
     Prod VARCHAR(10) 
) 

DECLARE @Customer TABLE(
     id INT 
) 

INSERT INTO @Products SELECT 1, 'a' 
INSERT INTO @Products SELECT 2, 'b' 
INSERT INTO @Products SELECT 3, 'c' 
INSERT INTO @Products SELECT 4, 'd' 

INSERT INTO @Customer SELECT 1 
INSERT INTO @Customer SELECT 2 
--use a cross product select, BUT apply a random order number per customer, 
--and only select the 'TOP N' items you require. 
;WITH Vals AS (
     SELECT c.id CustomerID, 
       p.id ProductID, 
       p.Prod, 
       ROW_NUMBER() OVER(PARTITION BY c.ID ORDER BY NEWID()) RowNumber 
     FROM @Customer c, 
       @Products p 
) 
SELECT * 
FROM Vals 
WHERE RowNumber <= 2 
+0

excelente, que hizo el truco :) –

Cuestiones relacionadas