【问题标题】:Choose 2 Random Values from 2 Separate Columns SQL从 2 个单独的列 SQL 中选择 2 个随机值
【发布时间】:2018-09-23 17:53:07
【问题描述】:

我必须准备测试数据以发送给第 3 方,但我不希望发送客户的真实姓名,也不希望发送他们的真实出生日期。

我可以通过将 DOB 随机增加几年来解决 DOB 问题。但是名称不同,是否有一个包含 10 个客户名称的列表,并且每次只需选择不同的名字和姓氏。

但我希望混合和匹配名称,因此它基本上随机选择 1 个名字,然后随机选择一个姓氏并将它们放在同一行。

SELECT TOP 1 opde.first_name 
FROM Table AS opde
ORDER BY NEWID()

这每次都会返回一个随机的名字,但如果我将姓氏列放入其中也会返回匹配的姓氏,我不希望我想要列表中的随机姓氏。

我尝试通过UNION 执行此操作,但您无法在UNION 中执行ORDER BY NEWID()

干杯。

【问题讨论】:

  • 只需从您导出的数据中删除名称列。为什么第三者仍然需要它?客户 ID 或散列客户 ID 就足够了。
  • 对我来说,只是拼真名不好。它仍然会泄漏有关您拥有的客户的一些信息。就像随机改变出生日期的一个组成部分一样,等等。想想罕见的名字/姓氏:泄露其中一个几乎可以确定某人的身份,然后你也会透露那个人的出生日期和月份!
  • @GordonLinoff - 我想这更有意义,我可以在其中放置一个占位符,也许只是在每行增加一个数字的姓氏。 JohnSmith1、John Smith2 等
  • @GordonLinoff - 另外,我可以创建一个卡通人物姓名表,并在下面使用 Tim 的查询吗?
  • 您可以使用 newid() 对姓氏进行交叉申请

标签: sql-server tsql


【解决方案1】:

我认为这个可能会有所帮助......

WITH fn AS
(
    SELECT TOP 1 opde.first_name
    FROM Table AS opde 
    ORDER BY NEWID()
),
sn AS
(
    SELECT TOP 1 opde.surname
    FROM Table AS opde 
    ORDER BY NEWID()
)
SELECT first_name, surname
FROM fn
CROSS APPLY sn;

在 fn 子查询中,您选择一个随机的名字。在 sn 中,您也可以这样做,但要使用姓氏。 通过交叉应用,您可以将这两个结果结合起来

【讨论】:

  • 您可能还想添加一些解释。仅代码的答案被认为是低质量的。
【解决方案2】:

您可以使用子查询的联合,每个子查询都使用 order by 和 NEWID

SELECT first_name
FROM
(SELECT TOP 1 opde.first_name FROM Table AS opde ORDER BY NEWID()) t1
UNION ALL
SELECT first_name
FROM
(SELECT TOP 1 opde.first_name FROM Table AS opde ORDER BY NEWID()) t2;

Demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 2022-01-15
    相关资源
    最近更新 更多