我正在尝试生成一些虚拟数据,并且需要在每个新行上重新应用逻辑。
例如, 单词是“ 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”的信息。我需要在每一行上随机选择它。
有什么想法吗?
答案 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正在运行
,所以我真的不明白您的为什么不起作用