SQL Server语言 - SQL:在查询的其他部分中引用计算列



我想在SQL Server 2012中执行以下操作:

SELECT UnitPrice * Quantity as SubTotal,
       SubTotal * (1-0.13) as Tax,
       Tax + SubTotal as Total
FROM Invoice

据我所知,这不可能像上面写的那样做,但是我想知道是否有一种特殊的方法来动态识别列,可以在查询中的其他地方引用,例如"字段列表"(SELECT 子句的一部分),作为 WHERE 子句的一部分或在 ORDER BY 子句中。

任何帮助将不胜感激。

部分解决方案(然而,在许多情况下就足够了)是构造

with Query as (
  select SubTotal as SubTotal,
         SubTotal * (1 - 0.13) as Tax,
         SubTotal * (1 - 0.15) as AnotherTax -- etc.
    from Invoice
)
select SubTotal,
       Tax,
       Tax + SubTotal as Total
  from Query

您可以在cross apply中进行计算。

select T1.SubTotal,
       T2.Tax,
       T2.Tax + T1.SubTotal as Total
from Invoice as I
  cross apply (select I.UnitPrice * I.Quantity) as T1(SubTotal)
  cross apply (select T1.SubTotal * (1 - 0.13)) as T2(Tax)

SQL 小提琴

最新更新