Простой стол
Date |ChannelID
01/01/2001 | 1001
02/01/2001 | 1001
03/01/2001 | 1001
04/01/2001 | 1001
05/01/2001 | 1001
06/01/2001 | 1001
Мне нужно заменить значения ChannelID на 1001, 2001 или 2002, случайно в каждой строке.
Я попытался сделать следующее, но, похоже, не дал мне случайных записей, и почему-то пропустил последнее значение.
update A
set ChannelID = (
SELECT TOP 1 b.q
FROM (
SELECT 1001 AS q
UNION ALL
SELECT 2001
UNION ALL
SELECT 2002
) b
CROSS APPLY (
SELECT TOP 1 b2.q2
FROM (
SELECT 1001 AS q2
UNION ALL
SELECT 2001
UNION ALL
SELECT 2002
) b2
WHERE b.q <> b2.q2
ORDER BY newid()
) b2
ORDER BY NEWID()
)
From A
Есть ли элегантный способ достичь этого без использования временных / переменных таблиц?
Извините, если это аналогичный пост, но не смог найти ничего без использования временных таблиц и т. Д.