如何从SQL Server中的字符串列表中选择随机字符串

时间:2018-07-24 14:31:32

标签: sql arrays sql-server list random

我正在尝试生成一些虚拟数据,并且需要在每个新行上重新应用逻辑。

例如, 单词是“ Comm ”和“ Resi ”。

我正在使用的查询如下;

    SELECT SubSkill = (
    SELECT TOP 1 Name
    FROM (
        SELECT RandomGUID = cast(round(RAND(CHECKSUM(NEWID())) * (1 - 10) + 10, 2) AS INT) 
            ,'Comm' AS Name 
    UNION ALL   
        SELECT cast(round(RAND(CHECKSUM(NEWID())) * (1 - 10) + 10, 2) AS INT)
            ,'Resi'
        ) NAMES
    ORDER BY RandomGUID
    )
,* FROM Sales2

但是,这给了我每条记录“ Comm”或执行时每条记录“ Resi”的信息。我需要在每一行上随机选择它。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

问题是过度优化。解决此问题的一种方法是使用相关子查询。这是一个示例:

select (select top (1) str
        from (values ('comm'), ('resi')) v2(str)
        where v.x is not null
        order by newid()
       )
from (values (1), (2), (3), (4)) v(x);

where子句更改子查询,以便每次对其进行评估。

您的查询看起来完全一样,除了外部的from子句和相关子句显然会使用您的列名。

答案 1 :(得分:0)

尝试一下,似乎可行。

;WITH CTE AS (SELECT *, newid() as nid, newid() as nid2 FROM Sales2)
SELECT  case when cast(nid as varchar(80))  > cast(nid2  as varchar(80)) then 'Comm' else 'Resi' END as fiddle,
* FROM CTE

由于您还有2个newID正在运行

,所以我真的不明白您的为什么不起作用
相关问题