是否可以将一个视图的列中的值用作第二个视图的列中的条件?

时间:2019-09-02 12:01:14

标签: tsql view case

我在视图中有一列是根据源表中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

1 个答案:

答案 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在评论中指出的那样,我们永远无法确定引擎将如何处理该语句。在查询中使用随机元素可能会导致意外结果。但是在这种情况下,我不会感到意外...