从带有查询的数组中选择5个随机值

时间:2013-08-16 15:40:39

标签: sql sql-server tsql

我可以从预定义列表中为查询选择5个随机值吗?说我这样做:

DECLARE @colors TABLE (Color VARCHAR(50))

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

但我宁愿做类似的事情:

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

显然,最后一个块不会起作用,但希望你能得到这个想法。我感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:1)

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

这将获得5行并随机排序。

编辑

这会有效吗?

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()

答案 1 :(得分: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()

答案 2 :(得分:0)

SELECT TOP 5 *
FROM Colors
ORDER BY NEWID()