Действительно ли возможно сделать соединение в SQL-сервере, который присоединяется к каждой строке от таблицы A до n случайных строк в другом? Например, скажите, что у меня есть таблица Customer, Таблица product и таблица Order. Я хочу соединить каждого клиента с 5 случайными продуктами и вставить эти строки в таблицу порядка. (И каждый клиент должен быть соединен с 5 случайными собственными строками, я не хочу всех клиентов, соединяющих с теми же 5 строками).
Действительно ли это возможно? Я использую SQL Server 2005, и хорошо, если решение характерно для этого.
Это - странное требование, но я в основном делаю маленький генератор данных для генерации некоторых случайных данных.
Посмотрите что-нибудь вроде этого
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