SQL Server视图中如何复用已定义的计算列?
在SQL Server视图中复用已计算列的方法
因为SQL Server的SELECT子句里,刚定义的列别名无法被同层级的其他表达式直接引用(解析顺序限制),要实现复用profit列来计算profit_prs,可以用以下两种常用方法:
方法一:使用CTE(公共表表达式)
先在CTE里计算出profit,再在外层查询中直接引用:
CREATE VIEW YourViewName AS WITH CTE_Profit AS ( SELECT date, sale, buy, sale - buy AS profit FROM tableA ) SELECT date, sale, buy, profit, profit / sale AS profit_prs FROM CTE_Profit
方法二:使用CROSS APPLY
通过CROSS APPLY单独计算profit,之后在主查询中复用该结果:
CREATE VIEW YourViewName AS SELECT a.date, a.sale, a.buy, calc.profit, calc.profit / a.sale AS profit_prs FROM tableA a CROSS APPLY ( SELECT a.sale - a.buy AS profit ) calc
额外提醒:如果sale字段可能为0,建议用NULLIF(sale, 0)避免除零错误,比如改写为profit / NULLIF(sale, 0)。
内容的提问来源于stack exchange,提问作者Khaled Nasser
相关产品推荐
相关产品推荐

