2013-08-16 1 views
0

Можно ли выбрать 5 случайных значений из предопределенного списка для запроса? Скажите, что я делаю это:Выберите 5 случайных значений из массива с запросом

DECLARE @colors TABLE (Color VARCHAR(50)) 

INSERT INTO @colors 
SELECT DISTINCT Color 
FROM [dbx].[dbo].[SampleData] 

Но я предпочел бы делать что-то вроде:

SELECT RANDOM_VALUE() FROM ('Red', 'Blue', 'Orange', ... 

Очевидно, что это последний блок не будет работать, но, надеюсь, вы получите эту идею. Я ценю любую помощь. Благодаря!

ответ

1
SELECT TOP 5 * FROM **QUERY** ORDER BY NEWID() 

Это позволит получить 5 строк и порядок их в случайном порядке.

EDIT

Would что-то линия эта работа?

DECLARE @temptbl TABLE(colour VARCHAR(100)) 
INSERT INTO @temptbl SELECT ('red') UNION SELECT ('blue') UNION SELECT ('green') 
SELECT TOP 2 colour FROM @temptbl ORDER BY NEWID() 
+0

Да, но как получить его из списка значений, которые я определяю явно? –

+0

Обратите внимание: нет необходимости использовать селекции union-ed, если вы просто вставляете несколько статических значений - например, см. Мой ответ. –

+0

Не работает ли этот стиль вставки только в SQL 2012? –

1

Поскольку точка, кажется, избегает постоянного хранения нескольких цветов, вот несколько альтернатив.

Это некрасиво, но вы можете объединение кучу выборов статических значений вместе:

SELECT TOP 5 * 
FROM (
    SELECT 'Red' 
    UNION ALL 
    SELECT 'Blue' 
    UNION ALL 
    SELECT 'Green'  
    ... etc. ... 
ORDER BY NEWID() 

Лучше было бы запихнуть статические значения в таблице параметров:

DECLARE @colors TABLE (Name VARCHAR(20) NOT NULL) 

INSERT INTO @colors VALUES 
('Red'), 
('Blue'), 
('Green'), 
... etc. ... 

SELECT TOP 5 * 
FROM @colors 
ORDER BY NEWID() 
Смежные вопросы