是否可以在同一个 SELECT 子句的 SELECT 子句中引用聚合函数的结果?

Rub*_*zzo 5 sql-server-2008 sql-server query syntax aggregate

我不是数据库管理员——只是一个软件工程师。我想知道是否可以减少以下 T-SQL 查询:

SELECT 
  SUM(Price * Quantity) as 'Total',
  SUM(Price * Quantity) * 0.95,
FROM
  SomeTables;
Run Code Online (Sandbox Code Playgroud)

对于这样的事情:

SELECT
  SUM(Price * Quantity) as 'Total',
  'Total' * 0.95,
FROM
  SomeTables;
Run Code Online (Sandbox Code Playgroud)

注意:这只是澄清/支持我的问题的示例。我当前的 SQL 查询比这更大更复杂。

Nic*_*mas 3

没有。只有您的ORDER BY子句可以在同一查询中引用分配的别名。

我建议声明一个计算第一个值的 CTE,然后在针对该 CTE 的查询中计算第二个值。

例如:

WITH totals AS (
   SELECT SUM(Price * Quantity) AS Total
   FROM   SomeTable
)
SELECT 
     Total
   , (Total * 0.95) AS DiscountedTotal
FROM totals;
Run Code Online (Sandbox Code Playgroud)

将 CTE 视为内嵌的一次性视图。它仅对紧随其后的查询有效。在这方面,与使用派生表或实际视图执行相同的操作或像在原始查询中那样计算总数两次相比,它不会给您带来任何性能优势。

当然,与在两个不同的查询中计算两次总数相比,使用 CTE确实具有优势,而且它看起来确实比所有其他方法更干净。