在处理列中的计算时交叉应用与案例语句

时间:2012-02-02 23:01:39

标签: sql sql-server-2008

使用Cross apply over case语句是否有优势?例如,如下所示,我需要对列进行计算,使用交叉应用来实现这一点是否效率低或者没有性能差异?

SELECT * from myTable
cross apply
(
  select test1 =
  CASE  
    WHEN Price <> '' AND Cost <> 0 and 
      Cast(Cost As float) <> -1 THEN Cost + Price                           
    WHEN Price <> '' AND Cost = 0 THEN bestPrice   
    WHEN Price <> '' AND Cost = -1 THEN CAST(Cost AS varchar(20))
  END 
) as test1  
cross apply
(
  select Handling = round(((Price * 1.2) + 2.5) / 0.85, 2)
) as Handling                              
WHERE (accuracy > 0 and Total <> -1)

1 个答案:

答案 0 :(得分:1)

没有性能差异。您可以通过查看两种变体的执行计划来验证这一点。

这种模式中的交叉应用只是一个“计算标量”。查询优化器对此非常了解。