Проблема
Я генерирую случайное число для каждой строки в таблице #Table_1
в CTE, используя эту технику .Затем я присоединяюсь к результатам CTE на другом столе, #Table_2
.Вместо получения случайного числа для каждой строки в #Table_1
, я получаю новое случайное число для каждой результирующей строки в соединении!
CREATE TABLE #Table_1 (Id INT)
CREATE TABLE #Table_2 (MyId INT, ParentId INT)
INSERT INTO #Table_1
VALUES (1), (2), (3)
INSERT INTO #Table_2
VALUES (1, 1), (2, 1), (3, 1), (4, 1), (1, 2), (2, 2), (3, 2), (1, 3)
;WITH RandomCTE AS
(
SELECT Id, (ABS(CHECKSUM(NewId())) % 5)RandomNumber
FROM #Table_1
)
SELECT r.Id, t.MyId, r.RandomNumber
FROM RandomCTE r
INNER JOIN #Table_2 t
ON r.Id = t.ParentId
Результаты
Id MyId RandomNumber
----------- ----------- ------------
1 1 1
1 2 2
1 3 0
1 4 3
2 1 4
2 2 0
2 3 0
3 1 3
Желаемые результаты
Id MyId RandomNumber
----------- ----------- ------------
1 1 1
1 2 1
1 3 1
1 4 1
2 1 4
2 2 4
2 3 4
3 1 3
Что я пытался
Я пытался скрыть логику генерации случайных чиселиз оптимизатора, приведя случайное число к VARCHAR
, но это не сработало.
Что я не хочу делать
Я бы хотелИзбегайте использования временной таблицы для хранения результатов CTE.
Как создать случайное число для таблицы и сохранить это случайное число в соединении без использования временного хранилища?