SQL Server使用计算列

7

我有一个类似这样的查询:

select 
(price1 + price2 + price3) as total_price 
from prices

我该如何使用计算列total_price来计算其他总价呢?
select 
(price1 + price2 + price3) as total_price,
(price4 + total_price) as total_price2
from prices    

这是否可能?


这个可能吗?你自己试过了吗? - Ash Burlaczenko
1
当然我试过了。我收到了一个“无效的列total_price”消息。 我想要实现的目标可能吗? - Vagelis Ouranos
4
不在同一查询内——查询处理器无法将输出列用作输入列。您需要每次编写公式,或者创建一个内部查询来计算第一层计算列,然后从该查询中选择,并计算下一级公式。 - Arvo
3个回答

11

不可能在同一级别引用列别名。出现在相同逻辑查询处理阶段中的表达式被视为同时评估

正如Joe Celko所说

在SQL中,事情是“同时发生”的,而不是像顺序文件/过程语言模型那样“从左到右”

但是你可以在CTE中定义它,然后在CTE之外重复使用它。

示例

WITH T
     AS (SELECT ( price1 + price2 + price3 ) AS total_price,
                price4
         FROM   prices)
SELECT total_price,
       ( price4 + total_price ) AS total_price2
FROM   T  

3
如果这个将会经常使用,我也会考虑在表格上创建一个计算列
ALTER  TABLE prices ADD
   total_price AS (price1 + price2 + price3)

那么您的查询就是:
select 
    total_price,
    (price4 + total_price) as total_price2
from prices

这样,您就可以应用DRY原则...


1
select T.total_price,
       P.price4 + T.total_price as total_price2
from prices as P
  cross apply (select P.price1 + P.price2 + P.price3) as T(total_price)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接