2010-06-16 14 views
6

È possibile creare un join nel server SQL che unisce ogni riga dalla tabella A a n righe casuali in un'altra? Ad esempio, supponiamo di avere una tabella clienti, una tabella prodotti e una tabella ordini. Voglio unire ogni cliente a 5 prodotti casuali e inserire queste righe nella tabella degli ordini. (E ogni cliente dovrebbe essere unito a 5 righe casuali della sua, non voglio che tutti i clienti si uniscano alle stesse 5 righe).Unire una singola riga in una tabella in n righe casuali in un'altra

È possibile? Sto usando SQL Server 2005 e va bene se la soluzione è specifica per questo.

Questo è un requisito strano, ma fondamentalmente sto facendo un piccolo generatore di dati per generare alcuni dati casuali.

risposta

6

Date un'occhiata a qualcosa di simile

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

eccellente, che ha fatto il trucco :) –

Problemi correlati