在其他别名中使用别名



在别名中使用别名有更好的方法吗?

例如,我不相信我能做select ... sum(...) as sum1, sum(...) as sum2, (sum1 + sum2) as sum3这样的事情

到目前为止,我需要为引用别名的任何新列保存所有这些子查询。例如,在一个查询中,sum(...) as sum1, sum(...) as sum2被保存为类似q1的东西,然后在一些新的查询中,具有(q1.sum1 + q1.sum2) as sum3

有更聪明的方法吗?

不能在别名中聚合别名。但是,您可以执行以下操作:

Select ...
,sum1 = sum( col1 ) 
,sum2 = sum( col2 ) 
,sum3 = sum( col1 + col2 )
From  YourTable
Group By ...

编辑-更新

Select *
,sum3 = sum1+sum2
From  (
Select ...
,sum1 = sum( {some complex case} ) 
,sum2 = sum( {some complex case} ) 
From  YourTable
Group By ...
) A

使用CROSS APPLY重用代码

大多数人使用CTE的/temp表,但如果您需要像解析字符串那样堆叠计算,这里有一个特别简洁的小技巧。不能将此技巧用于聚合函数(SUM、COUNT等(,但可以将其用于字符串解析、数字运算、条件语句等

Select A.*,B.Calc1,C.Calc2
FROM TableA AS A
CROSS APPLY (SELECT Calc1 = CASE WHEN...END) AS B /*Calculated column*/
CROSS APPLY (SELECT Calc2 = A.Col1 + B.Calc2 ) AS C /*Can reference columns in previous CROSS APPLY's*/

相关内容

  • 没有找到相关文章

最新更新