我在视图中有一列是根据源表中x%的随机选择创建的,然后我需要使用此列中的值作为CASE WHEN条件,以创建第二个视图的列。有可能吗?
CREATE VIEW view
AS
SELECT
[ItemId] = CASE
WHEN Id in (SELECT TOP 30 PERCENT Id FROM SourceTable ORDER BY NEWID()) THEN 2
ELSE 1
END,
[SecondItemId] = CASE
WHEN [ItemId] = 1 THEN 11
WHEN [ItemId] = 2 THEN 222
END
FROM SourceTable
答案 0 :(得分:1)
我不确定我是否正确理解了这个问题,但是我知道你想计算一个值并在另一个计算中使用该值。
APPLY
允许我们为集合创建其他列,这些列可以作为行计算的变量。试试这个:
SELECT A.SomeRandomItemId
,CASE A.SomeRandomItemId WHEN 1 THEN 11
WHEN 2 THEN 222
END AS TheDependantItemId
FROM SourceTable
CROSS APPLY(SELECT CASE WHEN Id in (SELECT TOP 30 PERCENT Id FROM SourceTable ORDER BY NEWID()) THEN 2 ELSE 1 END) A(SomeRandomItemId);
正如Damien_The_Unbeliever在评论中指出的那样,我们永远无法确定引擎将如何处理该语句。在查询中使用随机元素可能会导致意外结果。但是在这种情况下,我不会感到意外...