我在SQL Server 2005数据的3列:如何随机数据的顺序在3列
LASTNAME FIRSTNAME CITY
我想随机重新排列这些3列(以及Munge时间的数据),这样数据就不再有意义了。是否有捷径可寻?我不想更改任何数据,我只是想随机重新排列索引。
我在SQL Server 2005数据的3列:如何随机数据的顺序在3列
LASTNAME FIRSTNAME CITY
我想随机重新排列这些3列(以及Munge时间的数据),这样数据就不再有意义了。是否有捷径可寻?我不想更改任何数据,我只是想随机重新排列索引。
当你说“重新排序”这些列时,你的意思是你想要一些姓氏在名字列中结束吗?或者你的意思是说你想让一些姓氏与不同的名字和城市相关联?
我怀疑你的意思是后者,在这种情况下,你可能更容易找到一个编程解决方案(而不是直接的SQL解决方案)。与SQL坚持,你可以这样做:
UPDATE the_table
SET lastname = (SELECT lastname FROM the_table ORDER BY RAND())
取决于你所使用的数据库管理系统,这对于只有一条线的工作,可以使所有的姓氏相同,或者可能需要语法的某种变体一切工作,但基本的方法是正确的。当然,在对真品进行尝试之前,表格的拷贝上的一些试验是有保证的。
当然,要让名字和城市也被随机重新排序,您可以对这些列应用类似的查询。 (将其应用于所有三个并没有多大意义,但也不会伤害。)
由于您不想更改原始数据,因此可以在填充了所有行的临时表中执行此操作。
最后,如果您只需要每列中的一个随机值,就可以在没有制作数据副本的情况下进行适当的处理,并有三个单独的查询:一个选择随机名,一个随机姓,最后一个随机电话号码。
+1“你可能会发现一个编程解决方案更容易” – Kip 2009-08-20 19:41:56
这个解决方案没有为MS SQL服务器工作 – djangofan 2009-09-03 18:27:47
在SQL Server中,使用'NEWID()'而不是'RAND()'。我会用sql-server重申你的问题,以澄清你正在使用的东西。 – VoteyDisciple 2009-09-03 21:22:03
select *, rand() from table order by rand();
我了解SQL的某些版本中有一个RAND()不为每个行改变。检查你的。适用于MySQL。
我建议使用newid的校验和做随机
SELECT LASTNAME, FIRSTNAME, CITY FROM table ORDER BY CHECKSUM(NEWID())
在SQL Server 2005 +,你可以准备含有充满随机排名三个目标列和另外三个计算列一排行集(每个的三个目标栏)。然后,使用排列列将排名的行集与它自己连接三次,最后,三个目标列中的每一列将从它们自己的排名行集的实例中拉出。这里有一个例证:
WITH sampledata (FirstName, LastName, CityName) AS (
SELECT 'John', 'Doe', 'Chicago' UNION ALL
SELECT 'James', 'Foe', 'Austin' UNION ALL
SELECT 'Django', 'Fan', 'Portland'
),
ranked AS (
SELECT
*,
FirstNameRank = ROW_NUMBER() OVER (ORDER BY NEWID()),
LastNameRank = ROW_NUMBER() OVER (ORDER BY NEWID()),
CityNameRank = ROW_NUMBER() OVER (ORDER BY NEWID())
FROM sampledata
)
SELECT
fnr.FirstName,
lnr.LastName,
cnr.CityName
FROM ranked fnr
INNER JOIN ranked lnr ON fnr.FirstNameRank = lnr.LastNameRank
INNER JOIN ranked cnr ON fnr.FirstNameRank = cnr.CityNameRank
这是结果:
FirstName LastName CityName
--------- -------- --------
James Fan Chicago
John Doe Portland
Django Foe Austin
你的意思是姓,名,和城市将不再是在同一行? Doe,来自Lewiston的John可能最终成为来自奥本的Doe,William? – 2009-08-20 17:15:55
一个'John Doe,Austin',一个'James Foe,Chicago'的朋友应该成为'Austin John,Doe'还是'James Doe,Chicago'? – Quassnoi 2009-08-20 17:29:40