Присоединитесь к одной строке в одной таблице к n случайным строкам в другом

Действительно ли возможно сделать соединение в SQL-сервере, который присоединяется к каждой строке от таблицы A до n случайных строк в другом? Например, скажите, что у меня есть таблица Customer, Таблица product и таблица Order. Я хочу соединить каждого клиента с 5 случайными продуктами и вставить эти строки в таблицу порядка. (И каждый клиент должен быть соединен с 5 случайными собственными строками, я не хочу всех клиентов, соединяющих с теми же 5 строками).

Действительно ли это возможно? Я использую SQL Server 2005, и хорошо, если решение характерно для этого.

Это - странное требование, но я в основном делаю маленький генератор данных для генерации некоторых случайных данных.

7
задан Einar Egilsson 16 June 2010 в 08:35
поделиться

1 ответ

Посмотрите что-нибудь вроде этого

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
8
ответ дан 7 December 2019 в 05:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: