2010-04-28 69 views
0

搜索SO会产生很多结果,描述如何从数据库表中选择随机的数据。不过,我的要求有点不同,因为我希望以尽可能高效/随机/有趣的方式从整个随机行中选择个人在SQL Server中随机选择行*每列的最佳方法

为了更好地说明:我有一个很大的Customers表,并且我希望生成一堆虚构的演示客户记录,这些记录不是真正的人。我想的只是从客户表中随机查询,然后随机与LastNames,地址,城市,州配对FirstNames等

因此,如果这是我真实的客户数据(简化):

FirstName LastName State 
========================== 
Sally  Simpson SD 
Will  Warren WI  
Mike  Malone MN 
Kelly  Kline  KS 

然后我会生成一些记录看起来像这样的:

FirstName LastName State 
========================== 
Sally  Warren MN 
Kelly  Malone SD 

等等

我最初的方法有效,但它缺乏的是我希望的风采最终答案将提供。 (我与子查询的重复性,并且该解决方案需要字段的已知/固定数量,因此是不能重复使用的事实尤其不满。)

SELECT 
FirstName = (SELECT TOP 1 FirstName FROM Customer ORDER BY newid()), 
LastName= (SELECT TOP 1 LastNameFROM Customer ORDER BY newid()), 
State = (SELECT TOP 1 State FROM Customer ORDER BY newid()) 

谢谢!

+2

如果你说你想从你的表中选择一个随机列,对我来说,这似乎是你想要做的查询,并不知道结果将是一个国家,名字或姓氏。我不知道该怎么做,但它似乎也不是你想要的。 看来你*做*想要选择随机行。你只是想为每一列不同的随机行。对不起,除了建议你澄清你的问题之外,我无法帮助你。 – Jordi 2010-04-28 17:00:35

+0

我认为你们都是对的,因为我并不是真的想要随机专栏。这个概念很简单(正如我的样本表和样本结果所示),但措辞使我无法理解。如何“随机重新排列表中的单个列”?一旦我碰到最好的句子,我会编辑这个问题... – LesterDove 2010-04-28 18:12:44

+0

其实,新编辑的标题看起来很完美 - 谢谢 – LesterDove 2010-04-28 18:20:57

回答

3

ORDER BY NEWID()作品与ROW_NUMBER在SQL Server 2008中不知道有关SQL Server 2005,

这需要产生值加入3次独立的查询:这是稍微直觉,因为你认为它会始终以第100行以不同的顺序,但它不...

;With F AS 
(
    SELECT TOP 100 
    FirstName, ROW_NUMBER() OVER (ORDER BY NEWID()) AS Foo 
    FROM Customer 
), L AS 
(
    SELECT TOP 100 
    LastName, ROW_NUMBER() OVER (ORDER BY NEWID()) AS Foo 
    FROM Customer 
), S AS 
(
    SELECT TOP 100 
    State, ROW_NUMBER() OVER (ORDER BY NEWID()) AS Foo 
    FROM Customer 
) 
SELECT 
    F.FirstName, L.LastName, S.State 
FROM 
    F 
    JOIN L ON F.Foo = L.Foo 
    JOIN S ON F.Foo = S.Foo 
+0

+1非常好的使用NEWID和ROW_NUMBER – Meff 2010-04-29 12:05:18

+0

新东西;谢谢。是的,它在2005年工作 – LesterDove 2010-04-29 13:42:29

1

您可以一次选择前N个随机行(其中N = 3是列数),然后从第1行,第2行第2列等列出我不确定的确切方式在SQL中做最后一步,但如果你愿意做其他语言的最后一步,我相信它会很简单。

另外,通过一次选择N行,您将拥有新的属性,您永远不会从同一行中选择两列(尽管如果列数多于行数,这可能会造成麻烦)。

+0

+1我更喜欢另外保证没有真正的名字/姓氏与这种技术配对。 – LesterDove 2010-04-28 18:22:18

0

在我看来,你实际上是试图生成随机数据 - 事实上,你已经有一堆是非随机只是一个附注。如果我在你的鞋子里,我会考虑通过从字典中选择随机词作为FName,LName,City等来产生随机客户。无论如何,这看起来更容易和更随机。

+0

谢谢 - 这确实会照顾'randonmess'问题。这是一个样本报告,所以我不认为一个名叫Pogostick Zucchini先生的顾客是合适的。我想我想要的是随机化的客户数据,以更好的方式。这是我原来的帖子中的一个缺陷,对不起。 – LesterDove 2010-04-28 18:15:34

+0

Gotcha。现在我明白了。 – MJB 2010-04-28 19:45:23